2013-03-04 55 views
1

我有一個線程,我想等待來自另一個線程的三個回調事件(在特定的代碼行)。只有在收到這三件事後,我纔想繼續前進。C:信號燈 - 如何在n次回調後釋放信號量

我正在嘗試使用信號量。我知道一個信號可以鎖定在某個點上,並且一直等到它被其他線程釋放。 現在,問題是我想在發佈信號前等待三次回調,而不是一次回調。 我以爲有一個櫃檯,但我不確定是否有一個單獨的櫃檯將是線程安全的。 那麼有沒有一種方法來使用線程安全計數器來實現信號量?

這是針對Linux和Windows的。

謝謝。

+0

是操作系統,Linux還是Windows? – 2013-03-04 06:12:42

+1

信號量表示原子更新的整數。操作:[wait](http://linux.die.net/man/3/sem_wait)和[post/signal](http://linux.die.net/man/3/sem_post)遞減並遞增內部櫃檯。所以你不需要維護一個額外的'計數器' – 2013-03-04 06:15:45

回答

1

如果線程可以有可分配的數字,那麼您可能每個控制線程只能有一個布爾變量,然後檢查是否所有的線程在釋放暫停的線程之前都被設置。寫一個字節可能是原子的。

但是,正常的信號量會有原子計數器。