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

标签 c++ mutex

如果我创建一个像...这样的简单程序

#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/

相关文章:

c++ - boost::threads 执行顺序

C++ 循环声明

c++ - 在加载时选择特定的 opengl32.dll 文件

c++ - 如何使用互斥量作为成员变量?没有 'simple_encoder' 的拷贝构造函数被隐式删除

multithreading - 互斥锁和线程的问题

c++ - 多进程c++的锁机制

C++ 数组大小始终为 4

c++ - 从另一个进程在用户模式下回调,没有额外的线程

c++ - 将 char 数组分配给另一个 char 数组

c++ - 如果我在锁定互斥锁之前解锁它可以吗?