gpt4 book ai didi

c++ - 为什么互斥引用上的 lock_guard 会产生 C26110

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:46 27 4
gpt4 key购买 nike

Visual Studio Professional 2019 项目(版本 16.3.6)中的以下代码会产生警告:

#include <thread>
#include <future>

class Foo {
public:
mutable std::recursive_mutex _writingMutex;
std::recursive_mutex& writingMutex() const { return _writingMutex; }
};

int main()
{
Foo a;
std::lock_guard<std::recursive_mutex> lock(a.writingMutex()); // produces C26110
std::lock_guard<std::recursive_mutex> lock2(a._writingMutex); // no warning
}

第一个锁产生警告 C26110 :

Warning C26110 Caller failing to hold lock 'lock' before calling function 'std::lock_guard::~lock_guard'

为什么会这样?将互斥量作为引用传递是否不起作用?

最佳答案

根据Alan的编译结果和rustyx的评论,我来回答我自己的问题:

这很可能是 Visual Studio 中的代码分析错误。看起来 C26110 无法通过引用识别互斥锁。已报告此问题 here我在那里添加了我的最小示例作为评论。该问题在最新版本 16.3.7 中也仍然存在

关于c++ - 为什么互斥引用上的 lock_guard 会产生 C26110,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58710090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com