Resuming Processes within Monitor
Introduction
若多個 process 都 suspend 在同一個 condition variable x,x.signal() 必須決定誰先 resume。
最簡單是 FCFS;若問題需要特定順序,可使用 conditional wait。
Conditional Wait
Conditional wait 寫作:
x.wait(c);c 是 wait 時算出的 integer expression,也叫 priority number。x.signal() 發生時,priority number 最小者先 resume。
Example: ResourceAllocator
若 monitor 管理單一 resource,process request 時提供預估使用時間:
R.acquire(t);
/* access the resource */
R.release();Monitor 可用 x.wait(time) 讓使用時間較短者先 resume。
Limitation
Monitor 保證 monitor 內部 mutual exclusion,但不能自動保證外部 process 遵守 protocol;例如沒先 acquire() 就 access resource,或拿到後永遠不 release()。