如果我创建一个像...这样的简单程序
#include <mutex>
std::mutex gMutex;
int main()
{
gMutex.lock();
gMutex.unlock();
return 0;
}
...代码执行没有问题。
但是,在另一个应用程序中,当我创建 std::mutex
的全局实例并尝试调用 lock()
方法时,会引发异常。 (我没有确切的异常文本,但它提示互斥对象的内部为空)
查看失败的互斥锁对象的内部状态,我看到 _Mtx_storage
成员的 _Val
设置为 0.0000000000000000000
并且它是_Pad
成员设置为一个非空值,它指向一个空字节的小缓冲区(我认为它的大小为 0x4f 字节)。
当我将此状态与上面简单程序中的状态进行比较时,我发现代码中的 _Mtx_storage
状态不为空(我认为它是 0.000000000002
)作品。什么会导致它在我的其他应用程序中为空?
我正在使用 Visual C++ 2015。
任何想法都会受到赞赏。谢谢!
最佳答案
可能互斥锁还没有初始化。如果此代码在 main
之前运行,请查看是否可以在代码不在 main
之前运行的情况下重现该问题。
关于c++ - 为什么 std::mutex 在我调用 lock() 时抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406968/