7

我读了一些代码如下:

void
mcachefs_file_start_thread()
{
  pthread_attr_t attrs;
  pthread_attr_init(&attrs);
  pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_JOINABLE);
  pthread_create(&mcachefs_file_threadid, &attrs, mcachefs_file_thread, NULL);
}

在这里,设置attrs为的用途是PTHREAD_CREATE_JOINABLE什么?此外,它不是由创建的线程的默认属性pthead_create吗?

4

2 回答 2

13

是的,PTHREAD_CREATE_JOINABLE是默认属性。目的是它允许你调用pthread_join线程,这是一个等待线程完成的函数,如果它的主例程给你返回值。

有时,当你创建一个线程来做一些后台工作时,在你使用它的结果或转移到其他东西之前确保它已经完成可能是个好主意。这就是可连接线程的用途。

于 2012-08-04T07:44:07.010 回答
3

从 posix 规范来看,新初始化的线程属性对象中分离状态属性的默认设置确实是 PTHREAD_CREATE_JOINABLE。参见例如http://linux.die.net/man/3/pthread_attr_setdetachstate 所以你是对的:你的代码片段中不需要 pthread_attr_setdetachstate 代码行。

于 2012-08-04T07:43:41.900 回答