You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Peterson算法疑问:单进程仅用一次临界区时P1是否陷入死循环?

Peterson算法相关问题解答
flag[0]   = 0;
flag[1]   = 0;
turn;

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

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

问题1:P1是否会陷入while循环无法退出?

不会。P1的while循环采用逻辑与的判断条件,只要其中一个子条件不成立,循环就会终止:

  • P0执行完临界区后已将flag[0]设为0,此时flag[0] == 1为假;
  • 无论turn是否为0,flag[0] == 1 && turn == 0整体条件都不成立,循环直接退出,P1可以正常进入临界区。

问题2:当其中一个进程仅希望使用一次临界区时,Peterson算法会出现什么问题?

分两种核心场景讨论:

  1. 正常执行完一次后退出:
    若进程(如P0)正常执行完临界区,按代码逻辑将flag[0]设为0后彻底终止,另一个进程(P1)后续每次请求临界区时,flag[0]始终为0,while循环条件不成立,可直接进入临界区,不会出现功能异常。但Peterson算法本身的忙等待特性依然存在——即使没有竞争,P1每次进入前仍会执行循环检查,浪费CPU资源(这是所有忙等待同步算法的共性缺陷)。

  2. 异常终止(未重置flag):
    若进程(如P0)在进入临界区前、或临界区执行过程中异常终止,未将flag[0]重置为0,另一个进程(P1)会因flag[0] == 1始终为真,且若turn恰好等于P1的标识(0),则会永久卡在while循环中,无法进入临界区,出现死锁。

内容的提问来源于stack exchange,提问作者CedricJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:55:13