std::mutex (2013-01-17 12:25:41)转载▼ 标签: c11 stdmutex 异常 死锁 it 分类: c编程 c11中添加了std::mutex, vs2012支持该特性. 一、基本使用方法 #include std::mutex m; std:lock(&m); //do something std::unlock(&m); 或者: #include std::mutex m; m.lock (); //do something m.unlock(); 这种使用很直接,很明了。但是do something可能会带来异常,导致std::unlock(&m)没有执行,m处于死锁状态。 二、避免异常而导致的死锁。 a. 在do something中加上try...catch,在发生异常的地方释放锁: #include std::mutex m; m.lock (); try { //do something }catch(int e) { m.unlock(); return ; } m.unlock(); b.新建一个mutex管理器, 让对象的析构函数自动释放掉锁。 class Lock: { Lock(const std::mutex & m){m.lock();} ~Lock(const std::mutex & m){m.unlock();} } std::mutex m; Lock(m); //do something
|
|