看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《tzutengweng (神奇的湯姆)》之銘言: 我先附題目 Consider a process synchrinization problem , in which we have 5 people competing for 4 chairs , and each chair can be used by one person at a time Let the competing go by rounds. That is , 5 people compete for 4 chairs in the begining of each round , and the 4 winners release their chairs at the end of each round so that the next round starts . Please use semaphores to write programs for the entry and exit section of the 5 people so that every person will win at least ine time in competing the chairs for every 3 consecutive rounds. : : 【OS】 : : 8.好像表達的沒有很好 想參考一下大家怎麼寫的QQ : : Chair: semaphone=4; : : Pi: int=0; : : while(前兩輪) : : { : : Pi++; : : wait(chair); : : C.S. : : signal(chair); : : } : : if(Pi==0)then wait(chair); : : wait(chair); : : C.S. : : signal(chair); : --------------------------------------------------- : 我寫出我的想法,請大家指教,我覺得好像有bug可是我想不出來 : 以下表示第i個人的結構(共5人) : semaphore chairs=4; //總共四張椅子,相當於四單位資源 : int waitround[i]=0; //第i個人等待的次數,一開始設為0 : do{ : wait(chairs); : //sitting : signal(chairs); : } while(true) : 其中Semaphore之wait修改如下 : wait(S) : { while(S<=0&&waitround[i]%3!=0) : waitround[i]++; //等待期間增加等待次數 : //每個人都等待三次之後至少必須拿到一次椅子 : //也就是不能存在有人連續三次都沒拿到椅子 : S--; : } 這裡wait(S) { S-- if(S<=0) { add this process to S ->list block(); } } 原本wait()應該是這樣,假如如你所說的這個wait()就喪失原本的機制了 而且私心不太建議改掉wait、singal內部的程式碼 畢竟這是System提供給Semaphore的內建指令 我會比較傾向於處理 synchronization 問題 Semaphore Mutex = 1 ; Semaphore Prority = 1 ; // 當等待3次時的優先判定 int n = 0 ; // 椅子上的人數 int wait_times[5] // 5 people 等待次數 i = 1 ~ 5 Process i( int i ) │ Winner() do{ │ wait_times[i]++; │ do{ if (wait_times[i] = 3) │ if ( n = 4) //除非n=4 否則只有其他 { │ { process 互斥解除 wait(Priority); │ wait(mutex); //n = 4 互斥解除 wait_time[i]=0; │ /*休息時間*/ n++; │ int n = 0; //先將 n 初始化 } │ for( int j = 0 ;j<i;j++) else │ { { │ if(wait_times[j] = 3) wait(mutex); │ signal(Priority); n++; │ wait_time[i]=0; │ } //優先檢測是否有等超過3次的 } │ signal(mutex); │ //沒有了話就交給process自行決定誰是winner │ } signal(mutex); │ } while(true); }while(true); 歡迎各位大大幫小弟糾正錯誤 感謝 Q_Q -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.4.233 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1474456904.A.D62.html ※ 編輯: ken52011219 (36.224.4.233), 09/21/2016 19:28:30
ken52011219: 我的code 滿足同步標準的 1.mutex 2. Progress 但3可 09/22 10:36
ken52011219: 能會不滿足09/22 10:36
ken52011219: 但要滿足3.bound waiting 的條件我認為需要知道五個09/22 10:39
ken52011219: 人怎麼競爭的 才能更詳細地寫出 否則我就先以process09/22 10:39
ken52011219: 本身得到進入許可速度為基準 反正才五個process XDD09/22 10:39
※ 編輯: ken52011219 (49.216.192.93), 09/22/2016 10:45:44