8

を使用してメッセージをメッセージ キューに送信した後にライター プロセスがmq_send()、複数のリーダー プロセスが を使用してメッセージを読み取る方法はありますかmq_receive()mqへの 1 回の書き込みとからの 1 回の読み取りが予想さmqれますが、メッセージは失われます。

だから、私の理解が間違っているかどうか知りたいだけです。1 つのライター プロセスと複数のリーダー プロセスが posix メッセージ キューを使用して通信できるようにする方法はありますか。

4

1 に答える 1

9

はい、あなたの理解は正しいです。POSIX メッセージ キューでは、これを確実に行うことはできません。同じメッセージを異なるスレッド/プロセスに確実に伝えたい場合は、リーダーごとに異なるキューを使用する必要があります。

SYSV メッセージ キューに切り替えると、これを行うことができます。 Msgsnd()および msgrcv() は、合意されたプロトコルでメッセージのメッセージ タイプ フィールドを操作できます。たとえば、ライター プロセスは、メッセージのメッセージ タイプをリーダー プロセスの PID にします。リーダー プロセスは、そのメッセージ タイプのメッセージのみを読み取るように要求します。これには、ライターがリーダープロセスごとにメッセージを書き込む必要があることに注意してください。

于 2012-03-29T19:33:07.723 に答える