C++ unique_lock使用笔记

本文探讨了在多线程环境下,全局unique_lock导致竞态条件的问题,重点在于局部变量和全局变量的使用误区。通过实例展示了如何修正代码,避免因并发操作mutex而产生的unowned mutex错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尝试使用unique_lock时出现unlock of unowned mutex,abort has been call等问题,在网上搜索了很久在其他文章中都没有找到解决办法,自己检查了几遍程序逻辑也没发现什么错误。
排查了很久之后发现unique_lock变量被定义为全局变量,所有线程都能访问到lock变量,在各个线程中对同一个变量进行赋值操作会导致一些不可预测的问题,代码不规范。

出错程序的结构基本上是:

unique_lock<mutex> lock;
mutex mtx;
...
void fun1()
{
	lock=unique_lock<mutex>(mtx);
	...
}
void fun2()
{
	lock=unique_lock<mutex>(mtx);
	...
}
int main()
{
	thread t1(fun1);
	thread t2(fun2);
	thread t3(fun1);
	...

	t1.join();
	...
}

将lock改为局部变量问题就解决了…
走了很大一段弯路.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值