Uin*_*e81 4 c++ winapi multithreading exception
我正在使用c ++进行win 32多线程处理.场景:我有一个多线程使用的函数.此函数作为关键部分(或任何可以锁定资源的构造).在临界区中抛出异常.此时我需要注意在异常catch块中解锁资源.
有没有其他办法可以做到这一点?我的意思是,让我们说我不想记得在catch块中释放锁,是否有任何常见的方法来处理这个问题以避免这种容易出错的情况?
D.S*_*ley 16
想法是封装在对象中获取和释放关键部分的行为,使得构造对象获取CS并且销毁对象释放它.
struct CSHolder {
explicit CSHolder(CRITICAL_SECTION& cs): lock(cs) {
::EnterCriticalSection(&lock);
}
~CSHolder() { ::LeaveCriticalSection(&lock); }
CRITICAL_SECTION& lock;
};
CRITICAL_SECTION gLock;
void foo() {
CSHolder lockIt(gLock);
// lock is held until lockIt is destroyed
}
Run Code Online (Sandbox Code Playgroud)
该概念称为RAII - 资源获取是初始化.它是现代C++中非常常见的习语.