调用pthread_join(th,NULL)后调用pthread_detach(th)有什么意义吗?

时间:2013-12-18 13:25:56

标签: linux multithreading pthreads

我在开源软件中发现了一段奇怪的代码

for (i=0; i<store->scan_threads; i++) {
    pthread_join(thread_ids[i], NULL);
    pthread_detach(thread_ids[i]);
}

调用pthread_detach有什么意义吗?

2 个答案:

答案 0 :(得分:2)

那节很愚蠢,不安全。

设计方面,detach是不必要的 - join完成已经意味着线程已完全完成。什么都没有分离。 (有问题的代码只是生成具有默认连接性的线程。)

实施方面,detach不安全。一旦线程完成,线程ID就可以被回收 - 哎呀,并不意味着分离那个其他线程!更糟糕的是,在调用join之后,ID无法保证有意义 - SEGV?

答案 1 :(得分:1)

在此代码中(考虑到此代码来自主线程....)

pthread_join(thread_ids[i], NULL);

这将等待主线程返回线程ID为“thread_ids [i]”的线程,如果主线程正在做更多的工作,那么

pthread_detach(thread_ids[i]);

将释放线程使用的资源(线程ID为“thread_ids [i]”。