zoukankan      html  css  js  c++  java
  • 进程互斥 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;  
    }  
  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/xym4869/p/8476100.html
Copyright © 2011-2022 走看看