鉴于以下内容:
pthread_t thread;
pthread_create(&thread, NULL, function, NULL);
pthread_create
到thread
到底做了什么?
thread
加入主线程并终止后会发生什么?
如果在thread
加入后,您会这样做:
pthread_create(&thread, NULL, another_function, NULL);
答案 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);
没问题,因为你给它一个线程的引用,线程的值将被设置为刚刚创建的新线程的标识符。我怀疑它可能和以前一样,但我不会指望它。