彼得森的解决方案是什么?
彼得森的解决方案确保互斥。它在用户模式下实现,不需要硬件支持,因此可以在任何平台上实现。现在Peterson的解决方案使用两个变量:interest和Turn变量。
现在我们将首先看到Peterson解算法,然后看看任意两个进程P和Q如何使用Peterson解获得互斥。
#define N 2 #define TRUE 1 #define FALSE 0 int interested[N]=False int turn; void Entry_Section(int process) { int other; other=1-process interested[process]= TRUE ; turn = process; while(interested[other]==TRUE && Turn=process); } void exit_section(int process) { interested[process]=FALSE; }
解释
会有两个进程,第一个进程的进程号=0,第二个进程的进程号等于1。
因此,如果进程1调用entry_section,则other=1-process=1-1=0。
如果进程0调用则other=1-process=1-0=1
现在,由于调用entry_section的进程意味着该进程想要执行临界区,那么该进程将设置Interest[process]=TRUE
因此,如果进程1调用了入口部分,则感兴趣[1]=TRUE
如果进程0被称为入口部分,则interested[0]=TRUE
在宣布该过程很有趣后,它将开始轮到它。因此,如果调用进程1,则转=1。
然后,while(interested[other]==TRUE&&Turn=process);将被执行。
在这一行中,进程检查其他进程是否感兴趣。如果该进程感兴趣,则interested[other]==TRUE将为真,则该进程认为可能发生另一个进程正在执行临界区。
为此,它将进入一个循环,直到另一个进程不感兴趣为止。现在,如果另一个进程感兴趣,则感兴趣[other]==TRUE
它将变为False并且该过程将进入临界区。所以,这样一来,只有一个进程可以进入临界区。因此,在Peterson的解决方案中保证了互斥。退出临界区过程时会将兴趣设置为False。