2010-09-06 113 views
3

請查閱我對信號量的理解!CMU:信號燈

我明白計算信號量和二進制信號量的想法。然而,使用signal()和wait()實現的自旋鎖和信號量之間的區別與我融合在一起。

例如,自旋鎖基本上有兩個值(鎖定或解鎖的二進制真/假)。因此,自旋鎖基本上是一個二進制信號量,是正確的嗎?

當另一個進程處於內部時,任何嘗試進入關鍵部分的進程都將無法鎖定,並且會旋轉並持續檢查鎖定狀態,直至其解鎖,然後才能進入並鎖定它。

使用signal()和wait()函數的信號量本質上是從某種變量中加或減一個值。關鍵部分有一個限制。只有當變量具有某種價值時纔會打開它。消費者進程的一個示例實現將是wait(full),然後當它完成時執行,並在結束時發信號(空)。而生產者進程可能會等待(空),並在空時爲真時執行,然後當完成時它會發出信號(滿)。

wait()和基本上在循環中「等待」的自旋鎖之間有什麼區別?

+0

1,因爲我經常會混淆這些概念我自己。 – teukkam 2010-09-06 06:31:29

+0

謝謝,這真的是一個複雜的話題。我讀了很多,感覺就像我讀得越多,我就越困惑。 – 2010-09-06 07:03:37

回答

1

與信號量不同,自旋鎖可能用於無法入睡的代碼,例如中斷處理程序。

http://www.makelinux.net/ldd3/chp-5-sect-5.shtml

http://www.linuxjournal.com/article/5833

+0

據我所知,自旋鎖不應該用在單CPU系統中,除非它支持搶佔式內核,如果它沒有搶先式內核,使用自旋鎖並不是一個好主意。在關鍵部分正被讀取/寫入時,自旋鎖應禁用中斷,是否正確? //編輯 – 2010-09-06 07:18:09

+0

@Google對不起,我對非搶先內核知之甚少 – Anycorn 2010-09-06 20:42:36