• 进程互斥 Peterson算法


    转自http://blog.csdn.net/l294265421/article/details/46674847

    假设有两个进程需要互斥的访问某一个临界区。

     

    Peterson算法的形式如下:

    enterRegion(process);
    // process表示进程号 // 临界区 leaveRegion(process);

    具体实现如下(Java实现):

    有两个全局变量:

    // 用于表示轮到哪个进程  
    private int turn;  
    // 用于表示进程进入临界区的意愿,下标对应进程号  
    private boolean[] interested = new boolean[] {false, false};  

    enterRegion方法实现如下:

      /** 
    * @param process 进程号 
    */  
    ublic void enterRegion(int process) {  
    // 另一个进程的进程号  
    int other = 1 - process;  
      
    // 进程process想进入临界区  
    interested[process] = true;  
      
    // 设置轮到自己进入临界区了  
    turn = process;  
      
    /** 
     * 当两个进程同时想进入临界区时,它们的interested[process]都 
     * 为true,但后一个进程设置的turn值会覆盖前一个进程设置的turn值, 
     * 这样后一个进程的turn == process条件为真,它会在该while循环 
     * 中持续等待,而前一个进程的turn == process条件为假,能顺利进入 
     * 临界区;等前一个进程离开临界区后,后一个进程也能进入临界区 
     */  
    while (turn == process && interested[other] == true) {  
          
    }  

    leaveRegion方法实现如下:

    public void leaveRegion(int process) {  
        interested[process] = false;  
    }  
  • 相关阅读:
    设置导航栏标题颜色及字体大小
    FMDB的简单实用
    iPhone越狱
    P1122 最大子树和
    UVA11090 Going in Cycle!!
    P1156 垃圾陷阱
    P1325 雷达安装
    P1038 神经网络
    P2922 [USACO08DEC]秘密消息Secret Message
    P2292 [HNOI2004]L语言
  • 原文地址:https://www.cnblogs.com/xym4869/p/8476100.html
Copyright © 2020-2023  润新知