1. 场景

一个给定操作需要两个或两个以上的互斥量时可能会出现。

class LogFile{public:LogFile() {f.open("log.txt");}void shared_print(string msg,int idx) {  lock_guard<mutex> locker1(m1);lock_guard<mutex> locker2(m2);f << msg << ":" << idx << endl;}void shared_print2(string msg, int idx) {lock_guard<mutex> locker2(m2);lock_guard<mutex> locker1(m1);f << msg << ":" << idx << endl;}protected:
private:mutex m1;mutex m2;ofstream f;};void func(LogFile& log) {for (int i = 0; i > -100; i--) {log.shared_print2(string("sub thread:"), i);cout << "sub thread:" << i << endl;}}
}
using namespace multithread_02;
int main() {LogFile log;thread t1(func,ref(log));for (int i = 0; i < 100; i++) {log.shared_print(string("main thread:"),i);cout << "main thread:" << i << endl;}if (t1.joinable()) t1.join();return 0;
}

2. 解决方法std::lock同时上锁

void shared_print(string msg,int idx) {  lock(m1,m2);lock_guard<mutex> locker1(m1,adopt_lock);lock_guard<mutex> locker2(m2,adopt_lock);f << msg << ":" << idx << endl;
}void shared_print2(string msg, int idx) {lock(m1, m2);lock_guard<mutex> locker2(m2, adopt_lock);lock_guard<mutex> locker1(m1, adopt_lock);f << msg << ":" << idx << endl;
}

stdthread(9)死锁deadlock相关推荐

  1. 什么是死锁(deadlock)?

    ● 请问什么是死锁(deadlock)? 考察点:线程死锁 参考回答: 两个线程或两个以上线程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁.结果就是这些线程都陷入了无限的等待中. 例如,如果 ...

  2. ABAP面试题系列:写一组会出现死锁(Deadlock)的ABAP程序

    我们在计算机操作系统这门专业课上,学过死锁(Deadlock)的概念:两个或两个以上的进程(或线程)在执行过程中,由于竞争资源而造成的一种阻塞的现象,称为死锁.若无外力干预,这些处于死锁状态的进程将永 ...

  3. Java多线程学习之路(四)---死锁(DeadLock)

    Java多线程学习之路(四)-死锁(DeadLock) 1.定义 死锁就是多个线程在竞争共享资源的时候,相互阻塞,不能脱身的状态(个人理解).其实死锁一定程度上可以看成一个死循环. 举个现实生活中的例 ...

  4. 记mysql gone away和死锁Deadlock解决方案

    最近运行了两年的程序,在多个项目上出现了gone away和 Deadlock,下面记录下解决方案,以便以后查询. mysql gone away 可能原因 参考 http://ronaldbradf ...

  5. 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)

    之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个"坑"坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注: ...

  6. java jstack 死锁_利用jstack检测死锁DeadLock

    首先,制造一个死锁程序如下: public class testJstack { final static Object obj_1 = new Object(); final static Obje ...

  7. mysql deadlock found_mysql死锁 Deadlock found when trying to get lock; try restarting transaction

    研究了一下mysql的死锁,记录如下. 比如有2个事务,执行的sql分别如下: 这里用 #N 标识sql语句的执行顺序,下面开启两个mysql客户端连接,其中表的id为主键. 事务1 START TR ...

  8. 多线程,死锁,DeadLock

    /* 死锁. 同步中嵌套同步.*/class Ticket implements Runnable {private int tick = 1000;Object obj = new Object() ...

  9. mysql deadlock6_mysql死锁(deadlock)分析及解决

    问题1: 怎么会产生死锁那? 通过 show engine innodb status,捕获到了死锁详情 见下图: 注: 子订单表:channel_sub_order_0, 子订单号:suborder ...

最新文章

  1. 怎样提高团队管理能力5
  2. MyBatis——[注解方式]一对多查询DEMO
  3. python网站框架下载_Python搭建网站框架
  4. SAP S/4HANA 物料搜索(Material Search) 页面的外观和背后调用的 OData 服务
  5. 浅析透雾监控镜头的四大透雾技术
  6. python 全局_全局关键字,带Python示例
  7. 【转】ABP源码分析二十:ApplicationService
  8. web项目接到请求之后执行sql特别慢_小米开源!SQL优化工具,人工智能帮你 Rewrite...
  9. RGB图片和mask合在一起
  10. 打通WordPress和微信公众号
  11. Linux在安装文件时,yum基本配置出现错误
  12. yaml及使用PyYaml操作yaml文件详解
  13. PHP+Mysql 实现最简单的注册登录
  14. 胡爱玲医生论中医治疗荨麻疹的优势和理念
  15. 基于图像识别和文字识别用 Python 提取视频字幕
  16. python爬虫案例分析:爬取肯德基门店地址数据导入csv文件并最终用excel文档呈现
  17. 机器学习笔记(二)矩阵和线性代数 例:用Python实现SVD分解进行图片压缩
  18. 语音识别类产品的分类及应用场景
  19. 在 Linux 终端下生成随机/强密码的五种方法 | Linux 中国
  20. 酵母中微量元素螯合物的饲料添加剂及其生产方法

热门文章

  1. Java 洛谷 P1085 不高兴的津津
  2. 插入排序 链表 java_JAVA单链表(多项式)直接插入排序,大家看看我的怎么不行呢...
  3. python读取mtcars数据集并实现以下操作_Python可视化43 | plotnine≈R语言ggplot2,43plotnineR...
  4. 数据中心成“香饽饽”:阿里云未来再投2000亿,板块内掀起涨停潮
  5. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的pdf文件
  6. 5.1 Tensorflow:图与模型的加载与存储
  7. OS_CORE.C(10)
  8. linux下的/dev/shm/ 以及与swap目录的区别【转】
  9. 8.图片组件和动画效果--从零起步实现基于Html5的WEB设计器Jquery插件(含源码)...
  10. Android 自定义实现switch开关按钮