2012-12-02 30 views
0

我正在使用System V信號量,並希望在其啓動時阻止進程,並等待另一個進程完成其臨界區之後啓動特定信號量。
我認爲,sem_op = 0,將是適當的行動。等待零信號操作的確切功能是什麼?

所以我初始化1.
然後旗語在處理A中,需要我使用,以便在sem_op = 0到等待信號被阻止成爲0 在過程BI正在使用sem_op = -1。 (所以這使semaphore.val = 0)。

而當另一個成功地降低信號量時,應該被阻塞的進程將在標準輸出中打印。

什麼是等待零功能實際上做了什麼,我該如何正確使用它?

謝謝你的時間!

回答

0

根據手冊,semop = 0是「等待零」操作。所以你的算法應該工作。然而,最好用傳統的P和V算子來解決這些問題,其中P表示semop = -1,V表示semop = +1。因此,如果信號量的初始值爲0,則進程A應該執行P操作並阻止。過程B應完成其關鍵部分並執行V操作。只要進程B執行V操作,進程A的P操作就會完成,並且可以繼續前進。

+0

我已經成功地做了上下動作,但我想測試並確定何時以及何時等待零操作。我想我找到了一個例子。 – Chris