2013-02-22 108 views
1

我最近一直在研究和玩弄linux消息隊列,並且遇到了一些我不太明白的原因。Linux消息隊列 - 多個接收器

如果我們有兩個運行的程序都在無限for循環中使用msgrcv()來檢查消息併發送兩條消息,那麼第一個運行的程序將收到第一條消息,第二條消息會收到第二條消息?如果你繼續發送消息,它會在每個接收器之間交替。

顯然,我知道一旦有一個程序讀取了消息,它就會從隊列中刪除,但是如果他們都無限檢查,誰/如何決定誰會收到消息?

任何幫助,將不勝感激!

回答

1

簡單的答案是內核決定。

長的答案是,這是由the do_msgrcv() call within the Linux kernel處理。如果沒有消息可用,則調用者將被放入隊列中,直到有消息可用。不能保證像你所描述的那樣來回移動,因爲這一切都取決於每個msgrcv()調用的時間,但就您的情況而言,它幾乎可以在所有時間都以這種方式運行。

+0

正是我在找什麼,謝謝。 :) – swiss196 2013-02-22 02:19:26