2012-03-29 7 views
6

mq_send()을 사용하여 메시지 대기열로 메시지를 보낸 후 작성자 프로세스가 처리하는 방법이 있습니까? 다중 판독기 프로세스는 mq_receive()을 사용하여 메시지를 읽을 수 있습니다. mq에 1을 쓰고 mq에서 1을 읽으면 메시지가 손실됩니다.리눅스에서 posix 메시지 대기열을 사용하는 단일 발신자 및 다중 수신자 프로세스

그래서 나는 단지 내 이해가 잘못되었는지 알고 싶습니다. 단일 작성기 및 다중 판독기 프로세스가 posix 메시지 대기열을 사용하여 통신 할 수있는 방법이 있습니까?

답변

7

네 이해가 정확합니다. POSIX 메시지 대기열을 사용하면이 작업을 안정적으로 수행 할 수 없습니다. 다른 스레드/프로세스에 동일한 메시지를 확실히 전달하려면 각 독자마다 다른 대기열을 사용해야합니다.

SYSV 메시지 큐로 전환하면이 작업을 수행 할 수 있습니다. Msgsnd() 및 msgrcv()는 합의 된 일부 프로토콜에서 메시지의 메시지 유형 필드를 조작 할 수 있습니다. 예를 들어 작가 프로세스는 메시지의 메시지 유형을 독자 프로세스의 PID로 만듭니다. 판독기 프로세스는 해당 메시지 유형의 메시지 만 읽도록 요청합니다. 그래도 작성자는 각 판독기 프로세스에 대한 메시지를 작성해야합니다.