当我运行以下内容时,出现异常:Process returned -1073741819 (0xC0000005)
并且程序崩溃。
#include <mutex>
class MutexTest
{
public:
static std::mutex GlobalMutex;
};
std::mutex MutexTest::GlobalMutex;
int main()
{
MutexTest test;
test.GlobalMutex.unlock(); //makes it throw.
return 0;
}
但如果我这样做:
int main()
{
StaticMutexTest test;
test.GlobalMutex.lock();
test.GlobalMutex.unlock();
test.GlobalMutex.unlock();
test.GlobalMutex.unlock();
return 0;
}
它运行得很好。除了必须先锁定互斥锁之外,我该如何初始化互斥锁?我在某处读到0xC0000005
表示变量未初始化。文档说明必须首先锁定互斥锁才能解锁,并且解锁互斥锁上的解锁是未定义的行为。但我没有什么可以测试它是否已被锁定。
有什么想法吗?
答案 0 :(得分:6)
unlock()
调用std::mutex
的线程不lock()
的{{1}}是未定义的行为。 unlock()
始终会首先解锁。如果要创建最初锁定的互斥锁,则需要一个执行锁定的包装器。但我无法想象这种设备的用途是什么。