Windows多线程编程-临界区-产生死锁

本文探讨了Windows系统中线程在临界区产生死锁的问题。当线程未离开临界区即结束,其他线程无法进入。通过程序实例展示了如何利用临界区制造死锁状态,两个线程相互等待对方释放资源,形成僵局,揭示了死锁的原理。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值