什么是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。

更新于:2021年12月1日

6K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告