pthread_create()如何工作?

时间:2012-05-03 15:38:43

标签: c++ c pthreads

鉴于以下内容:

pthread_t thread;
pthread_create(&thread, NULL, function, NULL);
  • pthread_createthread到底做了什么?

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

  • 如果在thread加入后,您会这样做:

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

2 个答案:

答案 0 :(得分:5)

  

pthread_create究竟对线程做了什么?

thread是一个对象,它可以包含一个值来标识一个线程。如果pthread_create成功,则会填充标识新创建的线程的值。如果失败,则调用后thread的值未定义。 (参考:http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html

  

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

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

  

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

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

答案 1 :(得分:2)

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

pthread_cancel可以(线程)

使用正确的pthread_t标识符指定您感兴趣的主题。

  

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

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

  

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

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

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