使用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



1645

被折叠的 条评论
为什么被折叠?



