我在使用Critical Section object的地方有以下C++代码:
EnterCriticalSection(&cs);
// code that may throw an exception
LeaveCriticalSection(&cs);
即使抛出异常,如何确保
LeaveCriticalSection
函数被调用? 最佳答案
只需编写一个使用析构函数进行清理的防护即可:
struct Guard {
CriticalSection& cs;
Guard(CriticalSection& cs)
: cs(cs)
{
EnterCriticalSection(cs);
}
~Guard() {
LeaveCriticalSection(cs);
}
Guard(const Guard&) = delete;
Guard& operator = (const Guard&) = delete;
};
用法:
void f() {
Guard guard(cs);
...
}
关于c++ - 如何正确离开临界区?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29984941/