zoukankan      html  css  js  c++  java
  • Peterson算法

    Peterson算法是一个实现互斥锁并发程序设计算法,可以控制两个进程访问一个共享的单用户资源而不发生访问冲突。Gary L. Peterson于1981年提出此算法。

    算法使用两个控制变量flagturn. 其中flag[n]的值为真,表示ID号为n的进程希望进入该临界区. 标量turn保存有权访问共享资源的进程的ID号.

    //flag[] is boolean array; and turn is an integer
    flag[0]   = false;
    flag[1]   = false;
    turn;
    
    P0: flag[0] = true;
        turn = 1;
        while (flag[1] == true && turn == 1)
        {
            // busy wait
        }
        // critical section
        flag[0] = false;
        // end of critical section
    
    P1: flag[1] = true;
        turn = 0;
        while (flag[0] == true && turn == 0)
        {
            // busy wait
        }
        // critical section
        flag[1] = false;
        // end of critical section

    互斥访问该算法满足解决临界区问题的三个必须标准:互斥访问, 进入, 有限等待

    互斥访问

    P0与P1显然不会同时在临界区: 如果进程P0在临界区内,那么或者flag[1]为假(意味着P1已经离开了它的临界区),或者turn为0(意味着P1只能在临界区外面等待,不能进入临界区).

    进入

    进入(Progress)定义为:如果没有进程处于临界区内且有进程希望进入临界区, 则只有那些不处于剩余区(remainder section)的进程可以参与到哪个进程获得进入临界区这个决定中,且这个决定不能无限推迟。剩余区是指进程已经访问了临界区,并已经执行完成退出临界区的代码,即该进程当前的状态与临界区关系不大。

    有限等待

    有限等待(Bounded waiting)意味着一个进程在提出进入临界区请求后,只需要等待临界区被使用有上限的次数后,该进程就可以进入临界区。[3]即进程不论其优先级多低,不应该饿死(starvation)在该临界区入口处。Peterson算法显然让进程等待不超过1次的临界区使用,即可获得权限进入临界区。

    Peterson算法不需要原子(atomic)操作,即它是纯软件途径解决了互斥锁的实现。但需要注意限制CPU对内存的访问顺序的优化改变。

    from:http://zh.wikipedia.org/wiki/Peterson算法

  • 相关阅读:
    2-4安卓自学
    2-3安卓自学
    2-2安卓自学
    2-1安卓自学
    20210121 Sqlit数据库
    20210119 Sqlit数据库
    20210118 android学习
    20210117 android学习
    20210115 android学习
    20210114 android学习
  • 原文地址:https://www.cnblogs.com/theCambrian/p/3607560.html
Copyright © 2011-2022 走看看