std::互斥初始化异常
std::mutex Initialisation Exception
当我运行以下程序时,我得到一个异常: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
意味着变量没有初始化。文档中说,互斥锁必须先锁定,然后才能解锁,而对未锁定的互斥锁进行解锁是未定义的行为。但我还没有什么可以测试它是否被锁定。
有什么想法吗?
unlock()
调用unlock()
的线程调用的不是lock()
的std::mutex
是未定义的行为。std::mutex
将始终处于初始解锁状态。如果您想创建一个最初被锁定的互斥体,您需要一个执行锁定的包装器。不过,我无法想象这种设备会有什么用。
相关文章:
- 对象初始化后在C++中显示 char 数组时的异常行为
- c++ 中的异常类何时初始化?
- 未找到匹配的运算符删除;如果初始化引发异常,内存将不会被释放
- 当使用lambda进行变量的复杂初始化时,如何处理从内部抛出的lambda外部异常
- 聚合初始化中出现异常
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 初始化引发异常的对象
- 异常 尝试初始化动态数组时未处理
- 为什么初始化构造函数列表参数时会发生异常?
- 视觉C++ Int 似乎没有初始化并引发异常:读取访问冲突
- 如果初始化或销毁因未处理的异常而终止,则必须销毁完全构造的子对象
- 初始化不正确的价值不良样式后,正在抛出异常
- 如果从 c++ 中的构造函数引发异常,如何清理初始化的资源
- DLL 中的 C++ 静态局部变量初始化会导致_CrtIsValidHeapPointer异常
- 变量 C++ 的异常初始化
- std::互斥初始化异常
- 出现异常后重试本地静态变量初始化
- 类型初始化使用 OpenSsl.net 异常
- 每当我尝试初始化Employer对象时,我的程序都会给出一个未处理的异常错误
- TheoraVideoManager不会在0x7329E13D(msvcr110.dll)处初始化未处理的异常