c++多線程編程之互斥對象(鎖)的使用之----死鎖
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
一、死鎖會在什么情況發生
1、假設有如下代碼
mutex; //代表一個全局互斥對象
void A()
{
mutex.lock();
//這里操作共享數據
B(); //這里調用B方法
mutex.unlock();
return;
}
void B()
{
mutex.lock();
//這里操作共享數據
mutex.unlock();
return;
}
此時會由于在A、B方法中相互等待unlock而導致死鎖。
2、假設有如何代碼
mutex; //代表一個全局互斥對象
void A()
{
mutex.lock();
//這里操作共享數據
if(.....)
{
return;
}
mutex.unlock();
return;
}
由于在if的執行體內直接retun,而沒有調用unlock,導致另一個線程再調用A方法就出現死鎖。
二、如何避免死鎖
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成