【问题标题】:Mutual Exclusion(Peterson's Algorithm)互斥(彼得森算法)
【发布时间】:2013-02-17 17:41:11
【问题描述】:

我正在查看 Peterson 的算法(2 个进程的互斥) 我的问题是,如果还没有进程进入临界区并且 P0 想要第一次进入临界区,那么 P1 的标志将为假,所以P0如何进入它的临界区? P0 进入其临界区的条件取决于我们的标志 P1 是否为真。

代码:

    //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
    ...
    // end of critical section
    flag[0] = false;

P1: flag[1] = true;
    turn = 0;
    while (flag[0] == true && turn == 0)
    {
        // busy wait
    }
    // critical section
    ...
    // end of critical section
    flag[1] = false;

【问题讨论】:

    标签: concurrency process operating-system concurrent-programming mutual-exclusion


    【解决方案1】:

    P0 进入其临界区的条件取决于我们的标志 P1 是否为真。

    不,它没有。声明...

    while (flag[1] == true && turn == 1) { ... }
    

    正忙于等待 P1 的标志 stop 为真。即:P0 等待 P1 离开其临界区。由于 P1 还没有进入临界区,所以 P0 不忙等待,正确进入临界区。

    【讨论】:

    • 哦,我明白了,没有看到等待部分,我以为它说的是 while(){Critical section} 谢谢你澄清了,我笨。,
    猜你喜欢
    • 2017-05-05
    • 2011-02-24
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多