什么是死锁——多个线程循环等待对方释放所需的资源
一.死锁的发生
1. 忘记释放锁
void data_process()
{
EnterCriticalSection();
if(/* error happens */)
return;
LeaveCriticalSection();
}
2. 单线程重复申请锁
void sub_func()
{
EnterCriticalSection();
do_something();
LeaveCriticalSection();
}
void data_process()
{
EnterCriticalSection();
sub_func(); //sub_func()重复申请锁
LeaveCriticalSection();
}
3. 双线程多锁申请
void data_process1()
{
EnterCriticalSection(&cs1); //申请锁1
EnterCriticalSection(&cs2); //申请锁2
do_something1();
LeaveCriticalSection(&cs2);
LeaveCriticalSection(&cs1);
}
void data_process2()
{
EnterCriticalSection(&cs2);