首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用函数std::_Mutex_base::unlock之前未能保持锁的调用方

调用函数std::_Mutex_base::unlock之前未能保持锁的调用方
EN

Stack Overflow用户
提问于 2021-10-03 13:50:10
回答 1查看 345关注 0票数 0

我想创建自己的互斥类,以便与std::lock_guard一起使用。我有一个简单的实现:

代码语言:javascript
运行
复制
class A
{
    std::mutex m;

public:
    void lock() {
        m.lock();
    }

    void unlock() {
        m.unlock();
    }
};

但是在用MSVC编译时,它给出了一个警告caller failing to hold lock before calling function std::_Mutex_base::unlock。为什么会这样呢?

EN

回答 1

Stack Overflow用户

发布于 2021-10-03 14:14:42

我认为编译器发出的警告是公平的,它说解锁函数可能试图解锁未锁定的互斥对象,请参见:https://www.cplusplus.com/reference/mutex/mutex/unlock/

如果当前调用线程没有锁定互斥对象,则会导致未定义的行为。

不明确的行为是一件非常糟糕的事情,所以这里的警告是好的,就好像这种情况发生了,那么你就有麻烦了。

所以我不认为你可以用std::mutex来解决这个问题。但是,如果您使用的是posix,那么它将返回一个错误代码,我想您可以忽略它:https://linux.die.net/man/3/pthread_mutex_unlock,然后对其他错误代码做出反应。

当前线程不拥有互斥对象.

.

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69425456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档