博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11多线程04
阅读量:4698 次
发布时间:2019-06-09

本文共 1991 字,大约阅读时间需要 6 分钟。

死锁

#include 
#include
#include
#include
class LofFile{public: void shared_print(std::string name , int num) { std::lock_guard
locker(m_mutex) ; std::lock_guard
locker2(m_mutex2) ; std::cout<
<<": "<
<
locker2(m_mutex2) ; std::lock_guard
locker(m_mutex) ; std::cout<
<<": "<
<
-100 ;i--) { log.shared_print("子线程",i); }}int main(){ LofFile log ; std::thread t(thread_fun,std::ref(log)); for(int i=0 ;i<100;i++) { log.shared_print2("主线程",i); } t.join(); return 0;}

 

解决死锁方法1:使mutex顺序相同

#include 
#include
#include
#include
class LofFile{public: void shared_print(std::string name , int num) { std::lock_guard
locker(m_mutex) ; std::lock_guard
locker2(m_mutex2) ; std::cout<
<<": "<
<
locker(m_mutex) ; std::lock_guard
locker2(m_mutex2) ; std::cout<
<<": "<
<
-100 ;i--) { log.shared_print("子线程",i); }}int main(){ LofFile log ; std::thread t(thread_fun,std::ref(log)); for(int i=0 ;i<100;i++) { log.shared_print2("主线程",i); } t.join(); return 0;}

解决死锁方法2:使用std::lock

#include 
#include
#include
#include
class LofFile{public: void shared_print(std::string name , int num) { std::lock(m_mutex,m_mutex2); std::lock_guard
locker(m_mutex,std::adopt_lock) ; std::lock_guard
locker2(m_mutex2,std::adopt_lock) ; std::cout<
<<": "<
<
locker2(m_mutex2,std::adopt_lock) ; std::lock_guard
locker(m_mutex,std::adopt_lock) ; std::cout<
<<": "<
<
-100 ;i--) { log.shared_print("子线程",i); }}int main(){ LofFile log ; std::thread t(thread_fun,std::ref(log)); for(int i=0 ;i<100;i++) { log.shared_print2("主线程",i); } t.join(); return 0;}

 

转载于:https://www.cnblogs.com/guozhikai/p/6105892.html

你可能感兴趣的文章
MVC3和MVC4内置Razor引擎的差异
查看>>
shell编程基础
查看>>
数据结构学习笔记(树、二叉树)
查看>>
Smali代码语法
查看>>
可变参数数量
查看>>
AI时代学习新的技术,方向为计算机视觉--欢迎来我的简书blog拔草
查看>>
cf D. Dima and Hares
查看>>
cf C. Magic Formulas
查看>>
Jqgrid入门-别具特色的Pager Bar (四)
查看>>
Android中用URL模拟一个简单的图片加载器
查看>>
日常编程练习(六)
查看>>
javascript实现silverlight pivotViewer控件
查看>>
关于opencv的几个小总结
查看>>
《Java并发编程实战》第十章 避免活跃性危急 读书笔记
查看>>
将字符串使用md5加密
查看>>
20171026_Python学习第二周四次课
查看>>
各大主流.Net的IOC框架性能测试比较
查看>>
堆排序算法
查看>>
OC基础15:内存管理和自动引用计数
查看>>
【Deep Learning】genCNN: A Convolutional Architecture for Word Sequence Prediction
查看>>