进程同步

多道程序下进程是并发执行的,因此就产生了同步的问题。

解释几个概念:
临界资源:一次只能被一个所使用的资源
临界区:访问临界资源的那部分代码

同步:直接制约关系,必须要进程A先执行才能执行B,这就叫同步。比如管道通信的读写进程

互斥:间接制约关系,当一个进程进入临界区后,另一个进程必须在外等待,这就叫互斥。比如两个进程访问打印机,如果进程A在使用打印机,那么进程B必须等待

为禁止两个进程同时进入临界区,同步机制应遵循以下准则:

  • 空闲让进
  • 忙则等待
  • 有限等待:不能一直干等下去
  • 让权等待:如果进程不能进入临界区,那么应该释放它所拥有的处理器资源,防止进程忙等

实现临界区互斥的基本方法(不具体辣,具体的请百度)

软件实现方式

  • 单标志法:两个进程交替访问临界区。但是如果有一个进程不想访问了,那么另一个进程也没法访问了
  • 双标志法先检查:这种容易由于进程推进顺序不当而造成两个进程同时进入临界区
  • 双标志法后检查:这种可能会出现两个进程互相谦让结果谁都进不去
  • Peterson’s Alogrithm:这个可以!设置flag[i]flag[j]turn,伪代码如下:

进程i

flag[i] = TRUE, turn = j;
while(flag[j]&&turn==j);
临界区;
flag[i] = FALSE;
。。。

进程j

flag[j] = TRUE, turn = i;
while(flag[i]&&turn==i);
临界区;
flag[i] = FALSE;
。。。

硬件实现方式

(1)在进入临界区前关中断,退出后开中断。因为CPU只在中断发生的时候进行进程切换。
(2)硬件指令方式:即原子操作

解决互斥与同步问题的一个更好的机制是信号量,即wait(S)signal(S)原语,常记为PV操作,不过其实PV操作和这俩原语是有区别的。
细节请百度吧~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值