我读了一些代码如下:
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
创建的线程的默认属性吗?
答案 0 :(得分:11)
是的,PTHREAD_CREATE_JOINABLE
是默认属性。目的是它允许你在线程上调用pthread_join
,这是一个等待线程完成的函数,并且如果它的主程序给你返回值。
有时,当您创建一个线程来完成一些后台工作时,在使用其结果或转移到其他内容之前确保它已完成可能是个好主意。这就是可连接线程的用途。
答案 1 :(得分:3)
根据posix规范,新初始化的线程属性对象中的detach state属性的默认设置确实是PTHREAD_CREATE_JOINABLE。 例如,请参阅http://linux.die.net/man/3/pthread_attr_setdetachstate 所以你是对的:你的代码片段中不需要pthread_attr_setdetachstate代码行。