std::互斥初始化异常

std::mutex Initialisation Exception

本文关键字:异常 初始化 std      更新时间:2023-10-16

当我运行以下程序时,我得到一个异常: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意味着变量没有初始化。文档中说,互斥锁必须先锁定,然后才能解锁,而对未锁定的互斥锁进行解锁是未定义的行为。但我还没有什么可以测试它是否被锁定。

有什么想法吗?

unlock()调用unlock()的线程调用的不是lock()std::mutex是未定义的行为。std::mutex将始终处于初始解锁状态。如果您想创建一个最初被锁定的互斥体,您需要一个执行锁定的包装器。不过,我无法想象这种设备会有什么用。