首页 > 系统相关 >进程同步

进程同步

时间:2022-10-31 17:35:15浏览次数:49  
标签:同步 互斥 进程同步 flag turn 临界 进程


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

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

同步:直接制约关系,必须要进程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操作和这俩原语是有区别的。
细节请百度吧~~~


标签:同步,互斥,进程同步,flag,turn,临界,进程
From: https://blog.51cto.com/u_15854687/5810534

相关文章

  • 进程同步
    临界区对临界资源进行访问的那段代码称为临界区。为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。//entrysection//criticalsection;//exitse......