2

私は最近、Linux メッセージ キューを調査して遊んでいて、なぜそれが起こるのかよくわからないものに遭遇しました!

無限 for ループで msgrcv() を使用してメッセージをチェックし、2 つのメッセージを送信する 2 つのプログラムが実行されている場合、最初に実行されたプログラムは最初のメッセージを受信し、2 番目のプログラムは 2 番目のメッセージを受信しますか? メッセージを送信し続けると、各受信者間で交互に送信されます。

明らかに、1つのプログラムがメッセージを読み取るとすぐにキューから削除されることは理解していますが、すべてが無限にチェックされている場合、誰が/どのようにメッセージを受信するかを決定しますか?

どんな助けでも大歓迎です!

4

1 に答える 1

2

簡単に言えば、カーネルが決定するということです。

長い答えは、これはLinux カーネル内の呼び出しによってdo_msgrcv()処理されるということです。利用可能なメッセージがない場合、発信者はメッセージが利用可能になるまでキューに入れられます。すべては各呼び出しのタイミングに依存するため、説明したように行ったり来たりすることは保証されていませんmsgrcv()が、あなたの場合は、ほぼ常にそのように動作する可能性があります。

于 2013-02-22T02:11:15.473 に答える