zoukankan      html  css  js  c++  java
  • 多进程协同需要的锁机制记录

    两个进程共同操作一个变量引起的问题:

    assume counter=0; P1进程和P2进程都进行操作counter--,详细情况就是

    P1.register = counter;
    P1.register = P1.register-1;
    counter = P1.register;
    
    P2.register = counter;
    P2.register = P2.register -1;
    counter = P2.register;

    这种顺序下是没问题的。最后counter=-2;

    但是CPU执行了P1.register = counter; P1.register = P1.register-1; 之后可能会跳转到P2进行继续执行P2.register = counter; P2.register = P2.register -1;counter = P2.register;然后跳转到P1进程,执行counter = P1.register;

    最终这种执行顺序的结果就是counter=-1;显然是和我们的预期有差异。

    临界区保护原则:

    1、互斥进入:如果一个进程在临界区中执行,其他进程不允许进入

    2、有空让进:若干进程要求进入空闲临界区时,应尽快使一个进程进入临界区

    3、有限等待:从进程发出进入请求到允许进入,不能无限等待

    尝试1:轮换法

    // P0进程
    while(turn != 0);
    //临界区
    turn=1;
    
    // P1进程
    while(trun != 1);
    //临界区
    turn=0;

    不适合原因: P0执行了之后,P1如果没执行过,P0就进不去临界区了,出现死等的情况。

  • 相关阅读:
    如何编写linux下nand flash驱动-4
    Windows代码heap内存分析实战
    堆内存破坏检测实战--附完整调试过程
    排序算法:冒泡排序
    HDOJ 2802 F(N)
    HDOJ 1715 大菲波数
    HDOJ 1214 圆桌会议
    HDOJ 3466 Proud Merchants
    HDOJ 1215 七夕节
    HDOJ 2073 无限的路
  • 原文地址:https://www.cnblogs.com/micoblog/p/13047795.html
Copyright © 2011-2022 走看看