操作系统之同步互斥算法

一、硬件开关中断方式

这种实现进程同步互斥具有很高的效率但是会造成系统负担过大。

.....
关中断;
临界区;
开中断;
.....

二、单标志方法

该算法设置一个公用整型变量tum, 用于指示被允许进入临界区的进程编号,即若turn = 0, 则允许凡进程进入临界区。该算法可确保每次只允许一个进程进入临界区。缺点就是进程只能交替进入临界区

//P0进程
while(turn!=0){
临界区;
turn=1;
退出区;
}
//P1进程
while(turn!=1){
临界区;
turn=0;
退出区;
}

三、双标志先检查

该算法的基本思想是在每个进程访问临界区资源之前,先查看临界资源是否正被访问,若正被访问,该进程需等待;否则,进程才进入自己的临界区。为此,设置一个数据flag[i], 如第i个元素值为FALSE, 表示R进程未进入临界区的值true,则表示pj进入临界区。

//Pi进程
while(flag[j];
flag[i]=true;
临界区;
flag[i]=false;
退出区;
//Pj进程
while(flag[i]);
flag[j]=true;
临界区;
flag[j]=false;
退出区;

四、双标志法后检查

先检测对方的进程状态标志, 再置自己的标志, 由于在检测和放置中可插入另一个进程到达时的检测操作, 会造成两个进程在分别检测后同时进入临界区。为此, 算法三先将自己的标志设置为TRUE, 再检测对方的状态标志,若对方标志为TRUE, 则进程等待; 否则进入临界区。

//P0 进程:                        
flag[0] = true;
while (flag[1]);
临界区;
flag[0] = false;
剩余区;
//P1 进程:
flag[1] = true;		
while (flag[0]); 
临界区;	
flag[1] = false;
剩余区;     

五、Peterson 算法

//P0 进程:                        
flag[0] = true;turn = 1;
while (flag[1] && turn == 1);
临界区;
flag[0] = false;
剩余区;
//P1 进程:
flag[1] = true;turn = 0; 
while (flag[0] && turn == 0);
临界区;
flag[1] = false;
剩余区;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝域时空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值