2010-08-25 41 views

回答

5

一般來說,關鍵區域是一個地方,如果存在兩個獨立的執行線程,則會出現競態條件或其他不良影響。信號量是防止兩個線程在同一時間點處於關鍵區域的一種方式。

2

GUARD一次只允許1個線程進入關鍵區域,而信號量可以允許n個線程(您指定n)同時進入關鍵區域。

0

還有「臨界區」的兩種解釋:

  1. 的代碼,如果由兩個線程同時執行,將產生不確定的結果的區域。

  2. 除當前線程以外的所有執行程序隔離的代碼區域。這個例子就是一箇中斷處理程序。這些地區通常被稱爲「關鍵部分」。在Intel CPU上,您可以使用CLI/STI指令開始/結束關鍵部分。

+0

請注意,在虛擬內存的操作系統,CLI/STI可能不足以防範關鍵部分。如果代碼嘗試訪問不是立即可用的內存頁面,則無論是否啓用異步中斷,都會觸發中斷。 「期望」是,該中斷將從磁盤獲取必要頁面並返回到正在執行的代碼,但硬件中的任何內容都不會阻止操作系統在等待所需頁面被讀取時執行任何其他線程。 – supercat 2012-11-19 17:19:13

1

當一個進程執行操縱共享數據(或資源)的代碼,我們說該方法是在它的關鍵部(CS)(用於共享數據) 和信號燈使用非負整數變量作爲標誌和 信號如果和當資源是免費的