如果我创建一个简单的程序,比如......
#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。
任何想法都表示赞赏。谢谢!
答案 0 :(得分:2)
可能还没有初始化互斥锁。如果此代码在main
之前运行,请查看是否可以在main
之前没有运行代码的情况下复制问题。