Deadlock //死锁问题
问题引入:在目前的Windows系统中如果一个线程进入某个 critical section 而在未离开的情况下就结束(异常结束),而没有 执行LeaveCriticalSection() 的话,之后别的线程可以进入该临界区域吗?
程序实例:1)正常退出临界区域
2)不退出临界区域
结论:经对比发现,不退出临界区域的话,其他线程则无法进入该临界区域,这在一定程度上增强了系统的安全性。
那么现在就利用临界区产生死锁并对其进行分析。
程序思路:产生死锁则需要创建两个线程,需要初始化两块临界区,让线程落入你等我,我等你的状态。此时双方都需要对方退出自己最先进入的临界区域,接着互相等待对方最后退出的临界区域,这就像你把房门钥匙锁在了房间里。
代码实现:
#include<windows.h>
#include<stdio.h>
CRITICAL_SECTION c_s1,c_s2;
DWORD WINAPI FUN1(LPVOID P)
{printf("线程1正在进入临界区1...\n");
EnterCriticalSection(&c_s1); //进入临界区域
Sleep(10);
printf("线程1正在进入临界区2...\n