首页 > 其他分享 >GDB调试之多线程死锁调试(二十四)

GDB调试之多线程死锁调试(二十四)

时间:2024-01-25 13:44:22浏览次数:28  
标签:std 多线程 cout ++ int 死锁 include 调试

调试代码如下所示:

#include <thread>
#include <iostream>
#include <vector>
#include <mutex>
using namespace std;

mutex _mutex1;
mutex _mutex2;
int data1;
int data2;
int do_work_1()
{
	std::cout << "线程函数do_work_1开始" << std::endl;
	lock_guard<mutex> locker1(_mutex1);
	//模拟做一些事情
	data1++;
	std::this_thread::sleep_for(std::chrono::seconds(1));
	lock_guard<mutex> locker2(_mutex2);
	data2++;
	std::cout << "线程函数do_work_1结束" << std::endl;
	return 0;
}
int do_work_2()
{
	std::cout << "线程函数do_work_2开始" << std::endl;
	lock_guard<mutex> locker2(_mutex2);
	//模拟做一些事情		
	data2++;
	std::this_thread::sleep_for(std::chrono::seconds(1));
	lock_guard<mutex> locker1(_mutex1);

	data1++;
	std::cout << "线程函数do_work_2结束" << std::endl;
	return 0;
}
int main()
{
	thread t1(do_work_1);
	thread t2(do_work_2);
	t1.join();
	t2.join();
	cout << "线程运行结束" << endl;
	return 0;
}

编译运行: 

调试过程:

 

标签:std,多线程,cout,++,int,死锁,include,调试
From: https://www.cnblogs.com/TechNomad/p/17986978

相关文章

  • rust使用lazy_static对全局变量多线程并发读写示例
    首先需要在项目依赖Cargo.toml添加lazy_static依赖项[dependencies]lazy_static="1.4.0"示例代码如下:uselazy_static::lazy_static;usestd::sync::{RwLock,RwLockReadGuard,RwLockWriteGuard};usestd::thread;#[derive(Debug)]structSharedData{data:Vec<......
  • jmeter读取csv文件控制多线程不重复读取
    在Jmeter中设置并发为S,循环次数为N时,参数化文件可能被重复读取N次,无法保证每次读取的数据均不一样,此处介绍保证数据不重复的方法。在线程组下添加一个CSVDataSetConfig,具体配置如下图:将配置中默认:RecycleonEOF=True,StopthreadonEOF=False修改为:RecycleonEO......
  • 记录uniapp开发第一次使用mumu模拟器运行调试
     1下载Mumu模拟器mumu.163.com/2点击安装,按步骤下一步安卓mumu模拟器3打开mumu多开器右上角adb查看端口号4打开mumu模拟器5打开hbuild5.1选择运行,运行到手机模拟器,Android模拟器端口设置,将你自己多开器查看的端口号输入进去 5.2运行配置选择你mumu模拟器安装文......
  • 从CF1819A学习mex相关问题及assert调试宏
    Problem-1819A-Codeforces快速计算mexintcalcMex(vector<int>v){ sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()) intn=int(v.size());for(inti=0;i<n;++i)if(v[i]!=i)returni;returnn;}<cass......
  • chrom本地调试 selenium调试本地浏览器
    chrom本地调试 selenium调试本地浏览器1、cmd命令窗口执行下面命令,生成指定端口的chrom窗口。终端执行chrome.exe完整路径--remote-debugging-port=9222--user-data-dir="自定义用户信息文件夹路径",端口可修改。D:\Desktop\item\chromtest\Chrome\Application>chrome.ex......
  • Java 多线程交替打印
    目录题目方案一:synchronized方法二:ReentrantLock方法三:ReentrantLock+Condition(非公平锁)方法四:ReentrantLock+Condition(公平锁)方法五:Semaphore题目使用三个线程T1、T2、T3,如何让他们按顺序交替打印10次ABC。方案一:synchronizedpublicclassSynchronizedLockPrint......
  • 支付宝:多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!
    1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。2,在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行回滚,在多线程......
  • MySQL死锁
    简介在MySQL数据库中,死锁是指多个事务同时竞争同一资源,并且彼此互相等待对方释放资源而无法继续执行的情况,导致数据库操作无法完成,从而以最小的成本自动回滚事务的行为。排查方法1showengineinnodbstatus;执行以上命令会得到大量日志,在LATESTDETECTEDDEADLOCK与TRANSAC......
  • 精通 VS 调试技巧,学习与工作效率翻倍!
    ​✨✨欢迎大家来到贝蒂大讲堂✨✨​......
  • postman各种参数传递调试
    1.RequestBody传递--对象@RequestMapping("/user/login")publicResponseResultlogin(@RequestBodyUseruser){ResponseResultresult=sysUserService.login(user);returnresult;}--数组,集合同数组@RequestMapping("/test"......