iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0

Peterson's Solution 是一個以軟體為基礎的經典臨界區間問題解答,限制兩個行程在臨界區間和剩餘區間之間交替執行。
https://ithelp.ithome.com.tw/upload/images/20241006/20168766mXsVcvXvsS.png

共享的變數

  • int turn; 表示輪到誰進入臨界區間。例如,turn = 0 => 行程 P0 允許在它的臨界區間執行。
  • boolean flag[2]; 表示一個行程是否準備好進入它的臨界區間。例如,flag[1] = True => 行程 P1 準備好進去它的臨界區間。

程式碼說明

void Pi() {
    do {
        // 進入臨界區
        flag[i] = true;           // 表示想進入臨界區
        turn = j;                // 設置輪到另一個行程,自己想進入,但先讓給別人
        while (flag[j] && turn == j); // 檢查別人有無意願,若對方有意且turn在對方手上,則等待。

            critical section

        // 退出臨界區
        flag[i] = false;         // 表示自己無意願進入臨界區
        
            remainder section
        
    } while (true);
}

證明

提出解答之後,就是要證明滿足臨界區間問題的三項要求。用反證法來證明。

1. 互斥性存在。

假設兩個行程都在CS(critical section)中,產生矛盾,故反證。
https://ithelp.ithome.com.tw/upload/images/20241006/20168766KFqqZE5NRb.png

2. 進行的要求能被滿足。

某個想進入的行程總是能進去CS。
https://ithelp.ithome.com.tw/upload/images/20241006/20168766exWFHYiaro.png

3. 符合限制性的等待。

想進去的行程不會無止盡的等待,因為行程執行的時候,會先把turn給對方,所以自己不能一直重複做多次。
https://ithelp.ithome.com.tw/upload/images/20241006/20168766RIIGW5hmMo.png

參考:周志遠作業系統 Ch6: Process Synchronization (B): Software Solution


上一篇
ch6-臨界區間(Critical Section)問題
下一篇
ch6-同步之硬體 Hardware Support
系列文
十年後重讀作業系統恐龍本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言