【王道考研】进程互斥的软件实现方法

2.3.2 进程互斥的软件实现方法

知识来源: B站王道考研

单标记法

算法思想:两个进程在访问完临界区后会把使用临界区的权限转变给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。

int turn = 0; // 表示当前允许进入临界区的进程号
/**P0进程*/
while(turn != 0); // 进入区
critical section; // 临界区
turn = 1;         // 退出区
remainder section;// 剩余区

/**P1进程*/
while(turn != 1); // 进入区
critical section; // 临界区
turn = 0;         // 退出区
remainder section;// 剩余区

turn 的初值为0,即刚开始只允许0号进程进入临界区。

该算法可以实现“同一时刻最多只允许一个进程访问临界区”

单标志法违背了“空闲让进”

双标志先检查法

算法思想:设置一个布尔型数组flag[],数组中各个元素用来标志各进程想进入临界区的意愿,比如“flag[0] = true”意味着0号进程P0可以进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志flag[i]设为true,之后开始访问临界区。

bool flag[2];
flag[0] = false;
flag[1] = false;

//    P0进程:                   //P1进程
while(flag[1]);     /**一*/          while(flag[0]); // 五
flag[0] = true;		/**二*/			flag[1] = true; // 六
critical section;	/**三*/			critical section; // 七
flag[0] = false;	/**四*/			flag[1] = false; // 八
remainder section;				    remainder section;

若访问顺序为 一 五 二 六 三 七 P0和P1将会同时访问临界区。
违背“忙则等待”原则。
进入区的“检查”和“上锁”两个处理不是一气呵成的、“检查”后,“上锁”前可能发生进程切换。
可能产生“饥饿”

Peteson算法

算法思想:双标志后检查法中,连个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。Peterson算法在双方都争着想进入临界区,那可以让进程尝试“孔融让梨”,主动让对方先使用临界区。

遵循了空闲让进、忙则等待、有限等待三个原则,未遵循让权等待。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值