一、死锁会在什么情况发生
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方法就出现死锁。
二、如何避免死锁