我在使用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/

10-16 05:52