在没有在win32中释放Mutex的情况下使用“throw”是否安全?

时间:2012-03-26 12:28:53

标签: winapi mutex throw

首先,我测试了它并且效果很好。 我想知道它是否正确。

funcA() {  
    DWORD res = WaitForSingleObject(mutex, INFINITE);
    if (aaa != bbb) throw "aaa";

    ReleaseMutex(mutex);
}

WaitForSingleObject始终返回“0”,而不是“WAIT_ABANDONED”或任何其他错误代码。 我找不到任何描述Mutex将在“throw”上发布的文档。

谢谢

2 个答案:

答案 0 :(得分:1)

不,互斥锁不会在抛出时释放。

但是,您可以构建自己的Lock类来锁定构造函数上的互斥锁,并在其析构函数上释放它。然后,如果在函数中使用Lock对象(使用内存堆栈而不是堆),则可以确保调用该对象的析构函数并释放互斥锁。

这正是CSingleLock类在MFC中的作用。

答案 1 :(得分:1)

除非在析构函数或catch块中隐式调用release,否则不会。你是否展示了描述它所需的全部代码?