我在一个开源软件中发现了一段奇怪的代码
for (i=0; i<store->scan_threads; i++) {
pthread_join(thread_ids[i], NULL);
pthread_detach(thread_ids[i]);
}
调用pthread_detach有什么意义吗?
最佳答案
那节是愚蠢和不安全的。
在设计方面,detach
是不必要的——join
完成已经意味着线程完全结束。没有什么可分离的。 (有问题的代码只是生成具有默认可连接性的线程。)
在实现方面,detach
是不安全的。一个线程 ID 可能会在线程结束后立即被回收——哎呀,不是要分离另一个线程!更糟糕的是,在调用 join
返回后,ID 根本不能保证有意义 — SEGV?
关于linux - 在调用 pthread_join(th,NULL) 之后调用 pthread_detach(th) 有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659462/