Resuming Processes within Monitor

Introduction

若多個 process 都 suspend 在同一個 condition variable xx.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()