作者mozzan (mozzan)
看板Grad-ProbAsk
標題[理工] 作業系統 semaphore
時間Mon Jul 21 23:59:57 2014
大家好,有個關於semaphore概念想請教釐清
就是 semaphore 的 non busy-waiting 版本
也就是 block/wait 版本的 semaphore,
為什麼講義和課本上都有一段說
"即便是 Block/Wakeup + queue 的方式,也頂多是將busy-waiting由定義端
移到製作端"
我不懂的是 Block/Wakeup + queue 的方式不是已經排除了busy-waiting了嗎?
為何又會說是"表面上"呢?
wait(S) {
S.value = S.value - 1;
if(S.value < 0) {
add this process to S.list;
block(P); --> A
}
}
我的理解是當P被叫醒時,他會從A點往下跑,那這樣怎麼會有busy waiting情況
因為前面並不是 while,被叫醒後也不會再去檢查 S.value 不是嗎?
我想我一定哪裡有理解錯了,煩請大大賜教。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.162.12
※ 文章網址: http://www.ptt.cc/bbs/Grad-ProbAsk/M.1405958400.A.B30.html
※ 編輯: mozzan (118.170.162.12), 07/22/2014 00:00:37
推 A4P8T6X9:要確保不會同時執行wait跟 signal,本身就要 07/22 07:17
→ A4P8T6X9:busy-waiting,而不是在 wait中有。 07/22 07:18
→ mozzan:意思是不能有兩隻P同時進入wait,所以即使wait內部看起是用 07/23 00:25
→ mozzan:block&wake,但實際上還是會用到busy waiting的方法嗎? 07/23 00:26
→ A4P8T6X9:y 07/23 09:35
→ mozzan:感謝!! 07/23 13:35