Winapi 使用安全吗;扔;在win32中不释放互斥?
首先,我对它进行了测试,效果很好。 我想知道它是否正确Winapi 使用安全吗;扔;在win32中不释放互斥?,winapi,mutex,throw,Winapi,Mutex,Throw,首先,我对它进行了测试,效果很好。 我想知道它是否正确 funcA() { DWORD res = WaitForSingleObject(mutex, INFINITE); if (aaa != bbb) throw "aaa"; ReleaseMutex(mutex); } WaitForSingleObject始终返回“0”,而不是“WAIT_放弃”或任何其他错误代码。 我只是找不到任何描述互斥的文档会在“throw”上发布 谢谢不,互斥锁不会在抛出时释放
funcA() {
DWORD res = WaitForSingleObject(mutex, INFINITE);
if (aaa != bbb) throw "aaa";
ReleaseMutex(mutex);
}
WaitForSingleObject始终返回“0”,而不是“WAIT_放弃”或任何其他错误代码。
我只是找不到任何描述互斥的文档会在“throw”上发布
谢谢不,互斥锁不会在抛出时释放 但是,您可以构建自己的
Lock
类来锁定构造函数上的互斥锁,并在其析构函数上释放互斥锁。然后,如果在函数中使用Lock
对象(使用内存堆栈而不是堆),则可以确保调用该对象的析构函数并释放互斥锁
这正是该类在MFC中所做的。除非在析构函数或catch块中隐式调用release,否则它不会这样做。您是否显示了描述它所需的全部代码?如果您每年从同一线程调用funcA(),则这是预期的行为-由于Windows互斥体是递归的,因此会返回WAIT\u OBJECT\u 0。如果您第二次从另一个线程调用funcA(),我希望在第一个线程释放互斥锁之前,调用都会被阻止。您是对的。我正在使用xmlrpc库,我认为有多个线程用于处理请求,但只有一个线程。所以,这是预期的行为,我的互斥是不必要的!:)另外,ATL中的CCOMAuthoricalSection和CCOMCriticalSection锁定。