visual studio 2022 中mutex产生异常的解决办法

使用visual studio 2022开发时,发现对mutex处理有问题。会产生空指针错误。

关键是在我开发的win11环境下没有问题,程序到win7下测试兼容性时候才发现的,好不容易在win7下装了调试环境,才定位到这个地方,又上网针对性地查到有这个bug。几种解决方案如下:

1、使用vs的安装程序,回退v143生成工具,使用 14.39-17.9 的v143生成工具。

见 Visual Studio 2022 17.10.0 版 std::mutex报错问题解决方案_std::mutex 崩溃-CSDN博客 ​​​​​

2、添加预定义的宏

添加预处理器命令 _DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR=1

见 VS2022中使用锁程序崩溃_vs2022加锁崩溃-CSDN博客

3、实际上是新版的编译器,将未被直接使用的 mutex 当成 constexpr了,然后给优化没了

所以只要明确通知编译器,这是不能被优化的就可以,可以只要在某个地方明确地使用mutex就可以了

std::mutex mtx;

mtx.unlock();

4、还有一种是偶然发现的方法,在我没真正找到原因之前瞎试验出来的,通过定义类型欺骗编译器

typedef std::mutex LOCK_TYPE;
LOCK_TYPE mtx;

当然,最好的办法还是方法2。然后等vs修改bug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值