pthread_create(3)
的签名是:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
pthread_t *thread
参数的存储持续时间有哪些要求? pthread_create
的手册页说:
在返回之前,成功调用
pthread_create()
会将新线程的ID存储在thread
指向的缓冲区中;
但是不清楚它是否意味着它将值存储在那里以便调用者可以检查它,或者它是否使用该缓冲区来存储值(暗示缓冲区需要在子节点的整个生命周期内保持可用线)。
同样,pthread_self
表示返回
创建此帖子的
*thread
调用中pthread_create(3)
返回的值相同。
但不清楚是否意味着它返回存储在*thread
中的值或的值等于*thread
中返回的值
具体来说,我想知道是否合法:
void make_thread(void) {
pthread_t tid;
return pthread_create(&tid, NULL, some_fn, NULL);
}
或tid
需要malloc
'd。当我将tid
放在堆栈上时,我在valgrind中遇到了一堆与_Unwind_ForcedUnwind
相关的错误,这使我怀疑*thread
需要在子线程的生命周期内保持有效。
答案 0 :(得分:5)
返回线程ID供您自己使用。如果您要分离线程或者线程将自行分离,您不需要存储它。
void make_thread(void) {
pthread_t tid;
return pthread_create(&tid, NULL, some_fn, NULL);
}
这有点奇怪。您无法加入该主题,因为您没有保留其ID。而且你没有分开它。我想如果线程分离自己就可以了,但这是一种奇怪的做事方式。