0
考慮以下用途:使用二進制信號量作爲互斥量 - 它是否是免費的?
Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);
這段代碼滿足飢餓的自由(即,如果一個進程等待獲得CS裏面,它終究會成功)?
考慮以下用途:使用二進制信號量作爲互斥量 - 它是否是免費的?
Shared data: semaphore lock; // initially lock = 1
...
down(lock);
CRITICAL SECTION
up(lock);
這段代碼滿足飢餓的自由(即,如果一個進程等待獲得CS裏面,它終究會成功)?
這真的取決於在多個線程正在等待down(lock)
時選擇線程時使用的策略。
例如
例如,Java的計數Semaphore
在創建時可以配置爲「公平」或不是。在這裏,'公平'是指等待線程將放入FIFO中,以便等待最長的線程首先被執行。
看起來像你粘貼的僞代碼。什麼樣的'信號量'是'鎖定'?什麼是「下」和「上」? – ArjunShankar
@ArjunShankar:我可以想象,'down'和'up'是與信號量相關的標準操作。 –
無論如何,假設'down(lock)'是一種獲得獨佔訪問的方式,它真的取決於'down(lock)'是否公平。即如果有多個線程在等待它,那麼決定哪個線程勝出的邏輯是什麼。 – ArjunShankar