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