std :: mutex初始化异常

时间:2013-12-16 19:52:47

标签: c++ c++11

当我运行以下内容时,出现异常: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表示变量未初始化。文档说明必须首先锁定互斥锁才能解锁,并且解锁互斥锁上的解锁是未定义的行为。但我没有什么可以测试它是否已被锁定。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

unlock()调用std::mutex的线程不lock()的{​​{1}}是未定义的行为。 unlock()始终会首先解锁。如果要创建最初锁定的互斥锁,则需要一个执行锁定的包装器。但我无法想象这种设备的用途是什么。