2011-07-28 70 views
1

在UNIX操作系統中使用SysV信號量,可以實現一個進程等待信號量值達到0值的算法(有關詳細信息,請參閱man semop)。現在,每個人似乎都說使用其他同步API更好,所以我的問題是:如何使用pthreads,POSIX信號量或其他類似的API獲得相同的行爲?如果這是不可能的,我應該擔心使用SysV信號量嗎?值0上的信號量同步

編輯:我指的是一個多線程的場景,使用pthreads創建線程。

回答

0

Sysv信號燈非常適合多進程同步。替代品沒有下降。

如果您有一個進程並使用線程,那麼當您不需要時,sysv信號會產生大量開銷並佔用全局系統資源。我會簡單地使用POSIX信號量。

+0

編輯該問題。我處於多線程場景。我可以使用posix信號量,但是我看不出在問題中描述的信號量值0上獲得同步的明顯方法。 – Raffo

+0

@Rafflo:你想模仿一個障礙而不是信號量嗎?這就是當障礙達到0時,等待的所有資源都可以運行。 –

+0

是的,使用障礙可能會達到同樣的效果。不過,我目前在OSX上,在pthread中沒有內存屏障實現。另外需要注意的是,我並沒有意識到信號量將會達到的價值......我只想要一個線程停止,直到它不是0。 – Raffo