2011-03-07 79 views
1

我應該在Unix上編寫一個C應用程序,這樣N子進程將從父進程中分離出來,我將發送消息給這些子進程,並且子進程應該相互發送消息。從POSIX Message Queue接收特定消息

但問題是,我需要發送消息到特定的目標子進程。即父母將發送給孩子1,孩子1將發送給孩子2,...和孩子n將發送到1(循環)。

問題是,如果我只創建一個消息隊列,任何n孩子都可能會將消息出隊(因爲它們中的任何一個都可能會在父進程之後由於內核調度程序而運行),因此消息將以錯誤的進程出隊!

在我的應用程序中,會有最大值。 1隊列中的一條消息。我唯一想到的解決方案是創建不同的消息隊列並將消息傳遞到適當的隊列,以便特定的目標進程可以接收它。但我認爲我必須有一個更合理的解決方案。

任何想法?

Contraints:進程之間的管道是不允許的,我知道mq在這裏效率很低。我也會執行它們,都是必需的。 P.S.這是有點功課(該死,我的http://canyoudomyhomework.com的創造者),但是這不只是一門功課,一個具有挑戰性的問題,恕我直言。)

+0

我也不確定'mq_notify'是解決方案。 – 2011-03-07 20:55:25

+0

你覺得使用多個消息隊列是非法的嗎? – pilcrow 2011-03-07 22:08:09

+0

如果他們需要'N = 100'或更多呢?似乎效率低下,但它是目前唯一的解決方案。 – 2011-03-08 17:24:07

回答

1

根據不同的性能要求,通知代理(路由器)的解決方案感到最爲合適。

父母可以充當路由器,或者可以產生一個特定的過程來完成這項工作。

定義一個簡單的消息結構,其第一個元素作爲預期的目標,我們也可以指定父進程爲零。

每個進程在其本身和代理之間只有一個隊列。所有消息都在一個地方進行處理和路由,從而避免您提到的NxN扇出。

好運