我可以在 pthread_detached 线程上调用 pthread_join 吗?

Abu*_*nce 0 c pthreads

我有 16 个从一个父线程生成的线程。我正在通过在父级中调用 pthread_join 等待子级完成执行。然而,之后我在每个子线程中调用 pthread_detach。我想知道父母是否仍然会等待孩子们完成执行。在手册页中,它对 pthread_detach 说:“当分离的线程终止时,其资源会自动释放回系统,而不需要另一个线程加入终止的线程。”

Jon*_*ely 7

我可以在 pthread_detached 线程上调用 pthread_join 吗?

不。

我想知道父母是否仍然会等待孩子们完成执行。

这是未定义的行为。

pthread_join说:

pthread_join()如果线程参数指定的值不引用可连接线程,则行为未定义。

分离的线程不可连接。

如果一个子线程将自身更改为分离状态,而另一个线程正在尝试加入它,则您现在正在加入一个不可加入的线程。

您应该为每个线程调用其中一个pthread_joinpthread_detach 最多一次。不要为同一线程调用两者。