pthread_create()如何工作?

鉴于以下内容:

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 )

线程加入主线程后终止会发生什么?

对象没有任何反应,但它所持有的值不再引用任何线程(例如,您不能再将它传递给带有pthread_t函数,如果您不小心这样做,则可能会返回ESRCH错误)。

如果在线程加入后执行此操作,会发生什么:

与之前相同:如果pthread_create成功,则分配一个标识新创建的线程的值。

pthread_create将使用OS调用创建一个线程。 抽象的精彩之处在于你并不需要关心下面发生的事情。 它将变量线程设置为可用于引用该线程的标识符。 例如,如果您有多个线程并且想要取消其中一个线程,则只需调用

pthread_cancel可以(线程)

使用正确的pthread_t标识符来指定您感兴趣的线程。

线程加入主线程后终止会发生什么?

在线程终止之前,var线程用作获取或识别线程的键/索引。 线程终止后,键/索引指向的值不再必须有效。 你可以保留它并尝试重用它,但这几乎肯定会导致错误。

如果在线程加入后执行此操作,会发生什么:

 pthread_create(&thread, NULL, another_function, NULL); 

没问题,因为你给它一个线程的引用,线程的值将被设置为刚刚创建的新线程的标识符。 我怀疑它可能和以前一样,但我不会指望它。