2012-05-21 50 views
0

考慮以下用途:使用二進制信號量作爲互斥量 - 它是否是免費的?

Shared data: semaphore lock; // initially lock = 1 
... 
down(lock); 
CRITICAL SECTION 
up(lock); 

這段代碼滿足飢餓的自由(即,如果一個進程等待獲得CS裏面,它終究會成功)?

+0

看起來像你粘貼的僞代碼。什麼樣的'信號量'是'鎖定'?什麼是「下」和「上」? – ArjunShankar

+0

@ArjunShankar:我可以想象,'down'和'up'是與信號量相關的標準操作。 –

+0

無論如何,假設'down(lock)'是一種獲得獨佔訪問的方式,它真的取決於'down(lock)'是否公平。即如果有多個線程在等待它,那麼決定哪個線程勝出的邏輯是什麼。 – ArjunShankar

回答

1

這真的取決於在多個線程正在等待down(lock)時選擇線程時使用的策略。

例如

  1. 如果此策略基於隊列,則可以保證免於飢餓。
  2. 如果任意選擇了多個等待線程中的一個,那麼你可能會因爲運氣不好而餓死。
  3. 如果它是基於優先級的,那麼只要高優先級的線程繼續請求鎖,低優先級的線程就會餓死。

例如,Java的計數Semaphore在創建時可以配置爲「公平」或不是。在這裏,'公平'是指等待線程將放入FIFO中,以便等待最長的線程首先被執行。