一.传统多线程编写:
一般来说,我们在主线程中开辟出一些子线程来完成我们的任务,正常情况下,需要在主线程的最后调用join(),用于阻塞主线程,避免主线程先于其他子线程执行完毕,退出,然后导致整个进程的异常.
join():阻塞主线程,主线程等待其他子线程执行完毕,一起退出.
二.非传统多线程编写: 引入detach()
有人说,我们创建多个线程完成一些任务,不过需要主线程最后等待所有的子线程完毕才能退出,这样不好,主线程不自由. 所以,detach()应运而生,希望主线程可以正常的退出, 子线程被挪到后台运行,这些子线程会被C++运行时库接管,当这些子线程运行完毕后,由运行时库清理线程相关的资源, 即就是守护线程.
detach():会使线程失去我们的控制,但是如果希望子线程做的事情与我们控制与否不影响,那么
就可以使用detach(),因为子线程会跑到后台运行.
一旦调用了detach,就不要调用join,否则系统发生异常.
1 #include
2 #include
3 using namespace std;
4
5 void thread_callback()
6 {
7 cout
关注
打赏
热门博文
- DevOps实践教程 华为云 系列教程2021 合集
- ❤️Python Django网站开发 2021年最新版教程 合集❤️
- ❤️java多线程并发编程入门 教程合集❤️
- ❤️区块链Hyperledger Fabric 老版本 1.1.0 快速部署安装 教程合集❤️
- ❤️Docker教程小白实操入门 教程合集❤️
- ❤️微信小程序 云开发 教程合集(视频+图文)免费❤️
- C++ boost::asio::io_service创建线程池thread_group简单实例
- C++ error: ‘shared_ptr’ was not declared in this scope
- git 代码回滚回退到指定版本 并 提交
- C++ 得到map中最后一个元素