std::mutex (2013-01-17 12:25:41)轉(zhuǎn)載▼ 標簽: 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)沒有執(zhí)行,,m處于死鎖狀態(tài),。 二、避免異常而導致的死鎖,。 a. 在do something中加上try...catch,在發(fā)生異常的地方釋放鎖: #include std::mutex m; m.lock (); try { //do something }catch(int e) { m.unlock(); return ; } m.unlock(); b.新建一個mutex管理器, 讓對象的析構(gòu)函數(shù)自動釋放掉鎖,。 class Lock: { Lock(const std::mutex & m){m.lock();} ~Lock(const std::mutex & m){m.unlock();} } std::mutex m; Lock(m); //do something
|
|