2011-01-24 36 views
1

我對下面的語句非常困惑的一些問題..關於同步對象[Linux操作系統]

  1. 「的互斥體重量輕,比旗語更快」
  2. 「信號燈使用比條件變量的內存」

我已經讀過某個地方,信號量是基於系統調用..它處理更多的調度程序,因此它比互斥體慢。但我沒有得到它。請幫我清理這些概念。

Thanx

+0

這些語句是特定於實現的,但是因爲您標記了您的問題linux可能沒問題。但是,由於互斥和信號量不能達到相同的目的,所以直接比較它們並沒有多大意義。 POSIX(也就是Linux)有兩種類型的信號量,其中一種(SysV/XSI)速度慢,依賴於內核,另一種(POSIX)可以在用戶空間實現,只有在等待時纔會回退到內核。 – 2011-01-24 02:31:10

回答

5

互斥和信號量是兩個不同的東西。由於互斥體的簡單性,它可​​能會更快,但同時它有着不同的目的,所以比較這兩件事就像比較刀和淺灘。條件變量也一樣,它們只是不同而已。你可以將條件和計數器看作互斥體的互斥體。使用這三個對象可以實現信號量的行爲。然而,POSIX中的信號量也可用於同步跨進程的共享資源訪問,而互斥和條件僅是進程內對象。

至於輕量級和速度聲明,我想這取決於實現。 Linux中的信號量更復雜,因爲它們支持進程間同步,互斥體&條件使用子系統與原子操作。但再次,比較這些東西幾乎毫無意義,因爲它們服務於不同的目的。

我建議你閱讀關於這一問題的以下內容:

+0

+1但是...並非所有的系統都需要支持這一點,但如果正確初始化,POSIX互斥鎖和條件變量通常也可以在進程之間使用。所以它真的歸結爲API的差異,這真的是第一個鏈接強調的最重要的部分。 – 2011-01-24 09:04:22

0

請注意,您不限於互斥量,信號量或條件變量。你也可以直接使用原子操作。不要忘記谷歌「gcc原子操作」。順便說一下,它們是可以同步的最快/最低級的方式。