我想创建自己的互斥类,以便与std::lock_guard
一起使用。我有一个简单的实现:
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
。为什么会这样呢?
发布于 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,然后对其他错误代码做出反应。
当前线程不拥有互斥对象.
.
https://stackoverflow.com/questions/69425456
复制相似问题