一、死鎖會在什么情況發生
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方法就出現死鎖。
二、如何避免死鎖