2012-03-29 8 views
6

Esiste un modo in cui un processo di scrittura dopo l'invio di un messaggio alla coda messaggi utilizzando mq_send(), più processi di lettura possono leggere il messaggio utilizzando mq_receive(). Mi aspetto 1 scrittura a mq e 1 letto da mq, il messaggio è perso.Elaborazione di singoli mittenti e ricevitori multipli utilizzando la coda messaggi posix in linux

Quindi voglio solo sapere se la mia comprensione è sbagliata. Esiste un modo in cui un singolo writer e più processi di lettura possano comunicare usando le code di messaggi posix.

risposta

7

Sì, la tua comprensione è corretta. Non è possibile farlo in modo affidabile con le code dei messaggi POSIX. Se si desidera comunicare in modo affidabile lo stesso messaggio a thread/processi diversi, è necessario utilizzare una coda diversa per ciascun lettore.

È possibile eseguire questa operazione se si passa alle code di messaggi SYSV. Msgsnd() e msgrcv() possono manipolare il campo del tipo di messaggio di un messaggio in un protocollo concordato. Ad esempio il processo di scrittura renderà il tipo di messaggio del messaggio il PID del processo del lettore; e il processo del lettore richiederà di leggere solo i messaggi di quel tipo di messaggio. Si noti che questo richiede ancora allo scrittore di scrivere un messaggio per ogni processo del lettore.