std::thread(线程) 学习记录
发布日期:2022-02-06 00:27:07
浏览次数:27
分类:技术文章
本文共 2216 字,大约阅读时间需要 7 分钟。
std::thread(线程) 学习记录
1. thread的创建以及面临的问题
1.1 thread.cpp
//创建线程,C++中提供头文件thread,使用std的thread实例化一个线程对象的创建//std::thread在#include头文件中声明,因此使用std::thread需要包含#include头文件#include#include #include using namespace std;void thread1(){ for(int i = 0; i < 20; ++i) { cout<<"thread1..."<
1.2 终端编译
1.3 编译结果
2. thread::join( )
2.1 thread.cpp
//解决方法之一:thread::join()//使用join接口可以解决上述问题,join的作用是让主线程等待直到该子线程执行结束.#include#include #include using namespace std;void thread1(){ for(int i = 0; i < 10; ++i) { cout<<"thread1..."<
2.2 编译结果
3. thread::detach( )
3.1 thread.cpp
//解决方法:thread::detach()//将当前线程对象所代表的执行实例与该线程对象分离,使得线程的执行可以单独进行.一旦线程执行完毕,它所分配的资源将会被释放.//detach是用来分离线程,这样线程可以独立执行,不过这样由于没有thread对象指向该线程而失去了对它的控制.//当对象析构时,线程会继续在后台执行,但是当主程序退出时并不能保证线程执行完.//如果没有良好的控制机制或者这种后台线程比较重要,最好不用detach而使用join.#include#include #include using namespace std;void thread1(){ for(int i = 0; i < 10; ++i) { cout<<"thread1..."<
3.2 编译结果
4. mutex
mutex是防止不同的线程同时操作同一个共享数据.
4.1 mutex_test.cpp
//头文件mutex是用来保证线程同步的,防止不同的线程同时操作同一个共享数据.//#include:该头文件主要声明了与互斥量相关的类,//包括std::mutex系列类,std::lock_guard,std::unique_lock#include#include #include #include using namespace std;mutex m;int cnt = 10;void thread1(){ while(cnt > 5) { m.lock(); if(cnt > 0) { --cnt; cout< < 0) { m.lock(); if(cnt > 0) { cnt -= 10; cout< <
4.2 编译结果
- 结果分析:mutex是不安全的,如果当一个线程在解锁之前就异常退出了,那么其他被阻塞的线程就无法进行下去.
5. std::lock_guard
5.1 lock_guard.cpp
使用lock_guard则相对安全,它是基于作用域的,能够自解锁.
//使用lock_guard则相对安全,它是基于作用域的,能够自解锁,当该对象创建时,它会像m.lock()一样获得互斥锁//当生命周期结束时,它会自动析构(unlock),不会因为某个线程异常退出而影响其他线程.#include#include #include #include using namespace std;mutex m;int cnt = 10;void thread1(){ while(cnt > 5) { lock_guard lock(m); if(cnt > 0) { --cnt; cout< < 0) { lock_guard lock(m); if(cnt > 0) { cnt -= 2; cout< <
5.2 编译结果
转载地址:https://blog.csdn.net/weixin_46181372/article/details/115533047 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月09日 15时45分45秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP使用curl_multi_add_handle并行处理
2019-04-27
NP问题
2019-04-27
AT&T与Intel汇编语言的比较
2019-04-27
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2019-04-27
选择排序
2019-04-27
PHP session回收机制
2019-04-27
最新的全球编程语言,操作系统,web服务器等使用率分析报告
2019-04-27
用C语言写PHP扩展
2019-04-27
PHP Extension programming
2019-04-27
海量数据处理
2019-04-27
PHP防止注入攻击
2019-04-27
多路IO复用模型 select epoll 等
2019-04-27
Linux Epoll介绍和程序实例
2019-04-27
output_buffering详细介绍
2019-04-27
php缓冲 output_buffering和ob_start
2019-04-27
php error_reporting 详解
2019-04-27
剖析PHP中的输出缓冲
2019-04-27