鉴于以下情况:
pthread_t thread;
pthread_create(&thread, NULL, function, NULL);
到底
pthread_create
做什么thread
?thread
加入主线程并终止后会发生什么?如果在
thread
加入后,你这样做会发生什么:pthread_create(&thread, NULL, another_function, NULL);
pthread_create 到底对线程做了什么?
thread
是一个对象,它可以保存一个值来标识一个线程。如果pthread_create
成功,它会填写一个标识新创建线程的值。如果失败,则thread
调用后的值未定义。(参考: http: //pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html)
线程加入主线程并终止后会发生什么?
对象什么也没有发生,但它持有的值不再引用任何线程(例如,您不能再将它传递给采用 a 的函数,pthread_t
如果您不小心这样做了,那么您可能会ESRCH
返回错误)。
如果在线程加入后执行以下操作会发生什么:
和以前一样:如果pthread_create
成功,则分配一个值来标识新创建的线程。
pthread_create 将使用操作系统调用创建一个线程。抽象的美妙之处在于你不需要关心下面发生的事情。它将变量 thread 设置为可用于引用该线程的标识符。例如,如果您有多个线程并想取消其中一个,只需调用
pthread_cancel(线程)
使用正确的 pthread_t 标识符来指定您感兴趣的线程。
线程加入主线程并终止后会发生什么?
在线程终止之前,var 线程用作获取或标识线程的键/索引。线程终止后,键/索引指向的值不再有效。您可以保留它并尝试重用它,但这几乎肯定会导致错误。
如果在线程加入后执行以下操作会发生什么:
pthread_create(&thread, NULL, another_function, NULL);
没问题,因为你给它一个对 thread 的引用,所以 thread 的值将被设置为刚刚创建的新线程的标识符。我怀疑它可能和以前一样,但我不会指望它。