std::thread join和detach区别

thread detach, join
线程有两种状态,joinable或者detachable,pthread默认创建的线程是joinable的,也可以指定atrribute创建成一个detachable的线程。一个线程被创建后,最终一定要调用join或者detach(或者设置成detachable),以保证最后线程的资源会得到回收。

对于一个joinable的线程,join它后要等到它执行结束,调用线程才能继续向前运行。如果调用线程既希望被创建的线程资源回收,又不会被阻塞在join,那怎么办呢,调用detach,让其自动回收。

join:主线程被阻塞 detach:会分离,子线程自动回收资源

std::thread::detach()是C++11中引入的线程标准库中的一个成员函数。它用于将创建的线程与主线程解绑,使得线程在后台运行,不再与主线程进行同步。具体来说,在调用std::thread对象的detach()函数之后,该线程将成为"detached"状态,即与主线程解绑。 这个函数在Linux中的应用也是如此,它允许我们在创建线程后,将其与主线程分离,使得主线程可以继续执行其他任务,而不必等待该线程的结束。这对于一些需要并发执行的任务非常有用。 下面是一个示例代码,展示了std::thread::detach()函数的使用: ``` #include <iostream> #include <thread> void thread_function() { std::cout << "Inside Thread :: ID = " << std::this_thread::get_id() << std::endl; } int main() { std::thread threadObj(thread_function); if (threadObj.joinable()) { threadObj.detach(); } if (threadObj.joinable()) { std::cout << "Detachable Thread" << std::endl; } else { std::cout << "Non-Detachable Thread" << std::endl; } return 0; } ``` 在这个示例中,我们创建了一个线程对象threadObj,并传入一个函数thread_function作为线程的入口点。然后我们调用threadObj.detach()将该线程与主线程解绑。最后,通过判断threadObj.joinable()的返回值,我们可以确定该线程是否是可分离的。 总结来说,std::thread::detach()函数用于将创建的线程与主线程解绑,使得线程在后台运行,不再与主线程进行同步。它在C++11标准中引入,可以方便地编写与平台无关的多线程程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [linux C++ std::thread::detach()函数(线程分离)](https://blog.csdn.net/Dontla/article/details/125131895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [c++11中关于std::threadjoin的详解](https://download.csdn.net/download/weixin_38751537/13990981)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值