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

标签 linux multithreading pthreads

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

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/

相关文章:

c - 如何在服务器线程和客户端线程之间同步?

c - pthread_rwlock_rdlock 导致读取器数量变为负数

c - 在线程函数中使用字符串数组

android - 如何使 ftrace function_graph 跟踪器可以使用 linux 内核函数?

Java Thread ,答案是A怎么来的?

c# - 如何防止使用多线程插入重复值

c++ - BHO/ATL/COM 中的线程。 Winapi 还是其他什么?

c - 从套接字中读取消息挂起

c - 在库本身中获取动态库的文件名

linux - Dash,文件路径是否有任何限制