2010-10-26 26 views
0

我正在嘗試編寫一個不使用pthread或信號庫的程序。我想用信號做一些同步。我在幾本Unix書籍中已經閱讀過它們,但我仍然不太明白。我寫了一些模擬程序設計/代碼,這不是我的程序,但它提供了我如何組織進程/信號的想法。這似乎是一個似是而非的解決方案嗎?Unix進程同步沒有pthreads/sempahores,信號?

程序流程

主要叉次隨機數,並執行「方案」中的每個孩子。該程序爲孩子分配一個值,1或2(例如輸入或輸出等)。

我想要一種方法來同步這些孩子。我認爲使用信號可能是可能的,並從我讀的東西我想要做這樣的事情:

如果子== 1,發送父(主)SIGUSR1,否則如果子== 2發送父(主)SIGUSR2 。當父母服務信號時,然後結束。

現在回到主要我想組織這些傳入信號。我一次只接受一種類型,所以如果一個孩子給我SIGUSR1,我會阻止所有的SIGUSR2,或者如果一個孩子先給我SIGUSR2,那麼我會阻止所有的SIGUSR1。 Main將接收到該信號並服務該類型的所有信號,直到沒有更多的類型爲止,然後它將檢查/解除其他類型的服務,如果它們存在則爲其提供服務,否則main將等待更多信號。

這似乎是一個正確的信號使用,這甚至可能與信號?

謝謝!

+0

如果你想排隊的信號,一定要使用sigqueue(2)' – 2010-10-26 15:55:31

+0

謝謝,我會讀更多關於它! – 2010-10-27 02:40:44

回答

2

你不要說爲什麼要使用信號。你只是想弄清楚信號如何工作?

這似乎是一個正確的信號使用,這甚至可能與信號?

我不會接近你提出的那種設計思想。你不會說孩子們在做什麼,但我可能會使用管道,套接字或消息隊列。

如果您可以添加一些關於您的高級目標的信息,我可能會爲您提供更好的方向。

+0

我希望瞭解信號如何工作。通過解決一些經典的死鎖問題,我學習了信號/ pthread如何用於同步。我打算試着解決信號的一些死鎖問題。我想到的問題是單線橋問題。在這種情況下,我會嘗試使用一個信號作爲北車,一個信號作爲南車。我只會一次解鎖一個方向的橋(主),並在維護另一端之前處理流量(請求)。我不確定這是甚至可能的信號,但似乎是從我的信號讀取 – 2010-10-27 02:40:02

+0

可能,也許 - 作爲一個學術活動。但信號不會是我解決這個問題的首選。信號可能是我對這個問題的最後選擇。但是,除了最基本的IPC之外,我對任何其他信號都有偏見,可能是因爲必須修復糟糕的設計,這些設計在其他更合適的情況下嚴重依賴於信號的使用。 – bstpierre 2010-10-27 16:10:07

+0

謝謝,我想我會爲它進行一次學術演練。如果您想到任何可能有用的信息,請讓我知道,再次感謝! – 2010-10-31 13:05:38