2013-02-22 2 views
1

최근에 리눅스 메시지 대기열을 조사하고 놀았으며 왜 그런 일이 일어 났는지 잘 모르겠습니다.리눅스 메시지 큐 - 다중 리시버

무한 루프에서 msgrcv()를 사용하여 메시지를 확인한 다음 두 개의 메시지를 보내는 두 프로그램이 실행 중이면 첫 번째 프로그램은 첫 번째 메시지를 받고 두 번째 프로그램은 두 번째 메시지를 받게됩니까? 메시지를 계속 보내면 각 수신자가 번갈아 나타납니다.

분명히, 한 프로그램이 메시지를 읽 자마자 대기열에서 제거되지만 누가 무한히 확인한다면 누가 메시지를받을 것인지 결정할 것입니다.

도움이 될 것입니다.

답변

1

짧은 대답은 커널이 결정한다는 것입니다.

긴 대답은 the do_msgrcv() call within the Linux kernel으로 처리된다는 것입니다. 사용할 수있는 메시지가 없으면 호출자는 메시지를 사용할 수있을 때까지 대기열에 둡니다. 당신이 설명하는 것처럼 앞뒤로 갈 것을 보장하지는 않습니다. 왜냐하면 모든 것이 각각 msgrcv() 호의 타이밍에 달려 있기 때문입니다. 그러나 귀하의 경우에는 사실상 거의 항상 그런 식으로 행동 할 것입니다.

+0

정확히 내가 뭘 찾고 있었는지, 고마워. :) – swiss196