zoukankan      html  css  js  c++  java
  • 进程同步

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

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

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

  • 相关阅读:
    如何查看ubuntu版本
    基于Python与命令行人脸识别项目(系列一)
    问题 B: Curriculum Vitae
    问题 M: 克隆玩具
    1906: 鹊桥相会
    3265: 聪明的矿工
    2363: 完美旗手队列
    2545: 内部收益率
    2544: 台球碰撞
    3272: 公民身份号码
  • 原文地址:https://www.cnblogs.com/yinyoupoet/p/13287417.html
Copyright © 2011-2022 走看看