什么是Peterson解法?
Peterson解法确保了互斥。它在用户模式下实现,不需要任何硬件支持,因此可以在任何平台上实现。Peterson解法使用两个变量:`interested`和`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-进程 = 1-1 = 0。
如果进程0调用,则`other` = 1-进程 = 1-0 = 1
现在,由于调用了`entry_section`的进程意味着该进程想要执行临界区,则该进程将设置`interested[process]=TRUE`。
因此,如果进程1调用`entry_section`,则`interested[1]=TRUE`。
如果进程0调用`entry_section`,则`interested[0]=TRUE`。
声明进程感兴趣后,它将设置其`turn`。因此,如果调用进程1,则`turn = 1`。
然后,将执行`while (interested[other]==TRUE && Turn==process);`。
在这行代码中,进程检查其他进程是否感兴趣。如果该进程感兴趣,则`interested[other]==TRUE`将为真,然后进程认为另一个进程可能正在执行临界区。
为此,它将进入循环,直到另一个进程不再感兴趣。现在,如果另一个进程变得感兴趣,则`interested[other]==TRUE`
将变为假,并且进程将进入临界区。因此,通过这种方式,只有一个进程可以进入临界区。因此,在Peterson解法中保证了互斥。退出临界区时,进程将`interest`设置为False。