zoukankan      html  css  js  c++  java
  • peterson算法(软件互斥 转)

    • 1. 背景                                                                                                                                                                                                            
    •  首先,看个例子,进程P1,P2共用一个变量COUNT,初始值为0
                                            
     
         因为P1,P2两个进程的执行顺序是随机的,可能顺序执行也可能是并发的,由图可见,不同的执行顺序,COUNT的值会不同,这是不允许的。
         像这种情况,及多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关,称为竞争条件。
     
    • 2.临界区域问题
         为了避免上述情况的发生于是就引入了临界区概念。一个系统有n个进程,每个进程有一个代码段称为临界区。这种系统重要特征是当一个进程在临界区内执行,没有其他进程被允许在临界区内执行。
         临界区问题必须满足三项原则:互斥,前进,有限等待。解释如下:
                     
    • 3.Peterson算法   
         了解了临界区之后,那么如何控制两个进程访问一个共享的单位用户资源而不发生访问冲突。Peterson算法是一个实现互斥所的并发程序设计算法,它很好地解决了这个问题。
         先看看两个非该算法的程序。算法一是轮转的思想,类比值日。轮到谁谁上。第二个算法类似于标记算法。进入临界区进程标记为true。
                                              
         仔细分析上面两段代码可以知道当多进程执行代码时他们都违反了Progress原则(临界区三原则)。
         
         Peterson算法代码如下:很好地满足了临界区三原则。
         结合标记法与轮转思想。标记是前提。
     
                              pi进程                                              pj进程(交换i、j位置即可)       
                   
     
             伪代码
                        
  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/10529927.html
Copyright © 2011-2022 走看看