操作系統——進程間通信Peterson解法代碼簡析

Peterson解法解決的是進程中競爭的問題,比如:有兩個進程——進程0、進程1要讀取共享內存中的數據,假設他們幾乎同時進入了共享內存中,那麼就會造成一定的問題。


代碼如下:

#define N 2 //進程數爲2
int turn;  //現在輪到哪個進程?
int interested[N]; //初始化置爲false,即沒有在臨界區等待讀寫共享數據的

void enter_region(int process) //進入臨界區
{
     turn = process;
     int other = 1 - turn; //另一個進程
     interested[turn] = true;
     while(turn == process && interested[other] == true)
                ; //一直循環,直到other進程退出臨界區
}

void leave_region(int process)
{
     interested[process] = false;
}

進程通信時無非會產生下列的兩種情況:

1、進程0通信,進程1不影響。(反之亦然)

enter_region()中各參數的值:

turn = 0;

other = 1;

interested[0] = true;

interested[1] = false;

while循環直接在interested[other]那一步就退出了,進程0成功進入臨界區。


2、進程0通信,進程1也要通信。(反之亦然)

進程0的狀態如上。

進程1在enter_region()後各參數的值:

turn = 1;

other = 0;

interested[1] = true;

interested[0] = true;

while循環持續,直到進程0調用leave_region()退出臨界區,使得interested[0] = false。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章