進程互斥 Peterson算法

轉自http://blog.csdn.net/l294265421/article/details/46674847java

假設有兩個進程須要互斥的訪問某一個臨界區。算法

 

Peterson算法的形式以下:spa

enterRegion(process);
// process表示進程號 // 臨界區 leaveRegion(process);

具體實現以下(Java實現):
.net

有兩個全局變量:rest

 

// 用於表示輪到哪一個進程 
private int turn; // 用於表示進程進入臨界區的意願,下標對應進程號 
private boolean[] interested = new boolean[] {false, false};

 

enterRegion方法實現以下:code

/** * @param process 進程號 */ ublic void enterRegion(int process) { // 另外一個進程的進程號 
int other = 1 - process; // 進程process想進入臨界區 
interested[process] = true; // 設置輪到本身進入臨界區了 
turn = process; /** * 當兩個進程同時想進入臨界區時,它們的interested[process]都 * 爲true,但後一個進程設置的turn值會覆蓋前一個進程設置的turn值, * 這樣後一個進程的turn == process條件爲真,它會在該while循環 * 中持續等待,而前一個進程的turn == process條件爲假,能順利進入 * 臨界區;等前一個進程離開臨界區後,後一個進程也能進入臨界區 */  
while (turn == process && interested[other] == true) { } 

leaveRegion方法實現以下:blog

public void leaveRegion(int process) { interested[process] = false; } 
相關文章
相關標籤/搜索