为什么std :: mutex在调用lock()时抛出异常?

时间:2017-02-23 04:20:01

标签: c++ mutex

如果我创建一个简单的程序,比如......

#include <mutex>

std::mutex gMutex;

int main()
{
    gMutex.lock();
    gMutex.unlock();
    return 0;
}

......代码执行没有问题。

但是,在另一个应用程序中,当我创建std::mutex的全局实例并尝试调用lock()方法时,会引发异常。 (我没有确切的异常文本,但它抱怨互斥对象的内部为空)

查看失败的互斥对象的内部状态,我看到_Mtx_storage成员已将_Val设置为0.000000000000000000并且它_Pad { {1}}成员被设置为非空值,该值指向空字节的小缓冲区(我认为它的大小为0x4f字节)。

当我将这个状态与上面的简单程序中的状态进行比较时,我发现_Mtx_storage状态在代码中是非空的(我认为它是0.000000000002)。什么会导致它在我的其他应用程序中为null?

我正在使用Visual C ++ 2015。

任何想法都表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

可能还没有初始化互斥锁。如果此代码在main之前运行,请查看是否可以在main之前没有运行代码的情况下复制问题。