提问人:Dr. Debasish Jana 提问时间:4/12/2017 更新时间:6/13/2017 访问量:164
Solaris thr_join 与 posix pthread_join
Solaris thr_join vs posix pthread_join
问:
在 Solaris 中,thr_join文档声明如下:
int thr_join(thread_t thread, thread_t *departed, void
**status);
If the target thread ID is 0, thr_join() finds and returns
the status of a terminated undetached thread in the process.
POSIX等价吗?pthread_join
int pthread_join(pthread_t thread, void **status);
暂停调用线程的处理,直到目标线程完成 当我想知道在许多子线程中哪个子线程终止时thr_join我如何使用pthread_join。 还有其他选择吗? 换句话说,如果一个父线程生成了 N 个子线程,那么父线程如何通过轮询或其他方式知道哪个线程已退出/终止?
答:
0赞
Andrew Henle
6/13/2017
#1
POSIX等价吗?
pthread_join
是的,它是等价的。嗯,足够接近了。您可以看到实现中的差异:
int
thr_join(thread_t tid, thread_t *departed, void **status)
{
int error = _thrp_join(tid, departed, status, 1);
return ((error == EINVAL)? ESRCH : error);
}
/*
* pthread_join() differs from Solaris thr_join():
* It does not return the departed thread's id
* and hence does not have a "departed" argument.
* It returns EINVAL if tid refers to a detached thread.
*/
#pragma weak _pthread_join = pthread_join
int
pthread_join(pthread_t tid, void **status)
{
return ((tid == 0)? ESRCH : _thrp_join(tid, NULL, status, 1));
}
它们甚至使用相同的内部函数实现。
但是您不想使用 Solaris 线程。只需使用 POSIX 线程即可。
评论