`pthread_create`的`pthread_t *`参数需要多长时间才能存活?

时间:2016-03-10 22:30:31

标签: c multithreading pthreads lifetime

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需要在子线程的生命周期内保持有效。

1 个答案:

答案 0 :(得分:5)

返回线程ID供您自己使用。如果您要分离线程或者线程将自行分离,您不需要存储它。

void make_thread(void) {
  pthread_t tid;
  return pthread_create(&tid, NULL, some_fn, NULL);
}

这有点奇怪。您无法加入该主题,因为您没有保留其ID。而且你没有分开它。我想如果线程分离自己就可以了,但这是一种奇怪的做事方式。