2012-03-29 5 views
6

Gibt es eine Möglichkeit, dass ein Writer-Prozess nach dem Senden einer Nachricht zur Nachrichtenwarteschlange mit mq_send(), können mehrere Leser Prozesse die Nachricht mit mq_receive() lesen. Ich erwarte 1 schreibe auf und 1 gelesen von mq, die Nachricht ist verloren.Einzelner Absender und mehrere Empfänger Prozesse mit POSIX-Nachrichtenwarteschlange in Linux

Also ich möchte nur wissen, ob mein Verständnis falsch ist. Gibt es eine Möglichkeit, dass ein einzelner Writer und mehrere Reader-Prozesse mit Posix Message Queues kommunizieren können.

Antwort

7

Ja, Ihr Verständnis ist richtig. Sie können dies nicht zuverlässig mit POSIX-Nachrichtenwarteschlangen tun. Wenn Sie dieselbe Nachricht zuverlässig an verschiedene Threads/Prozesse kommunizieren möchten, sollten Sie für jeden Reader eine andere Warteschlange verwenden.

Sie können dies tun, wenn Sie zu SYSV-Nachrichtenwarteschlangen wechseln. Msgsnd() und msgrcv() können das Nachrichtentypfeld einer Nachricht in einem vereinbarten Protokoll bearbeiten. Zum Beispiel wird der Schreibprozess den Nachrichtentyp der Nachricht zur PID des Lesers machen; und der Leserprozess fordert an, nur Nachrichten dieses Nachrichtentyps zu lesen. Beachten Sie, dass der Verfasser weiterhin eine Nachricht für jeden Lesevorgang schreiben muss.

Verwandte Themen