2010-09-08 5 views
1

Если под UNIX/Linux/BSD/OSX, я использую эту последовательность API, в Приложении А:Очереди сообщений UNIX поддерживают порядок сообщений?

msgq_id = mq_open( full_queue_name, 
         O_RDWR | O_CREAT, 
         S_IRWXU | S_IRWXG, 
         &msgq_attr); 
    mq_send(msgq_id, ptrData1, len1, 0); 
    mq_send(msgq_id, ptrData2, len2, 0); 
    ... 

и эту последовательность событий в приложения B:

mqd_t open_res = mq_open(full_queue_name, O_RDONLY); 
    ... 
    mq_receive(...) 
    mq_receive(...) 

... сделать У меня есть гарантия, что очередь сообщений поддерживает порядок сообщений? То есть, что приложение B сначала получит данные из ptrData1, а затем данные из ptrData2?

ответ

2

От man mq_send на Linux (подчеркивание добавлено):

msg_prio аргумент является неотрицательным целым числом, которое указывает приоритет этого сообщения. Сообщения помещаются в очередь в порядке убывания приоритета, с более новыми сообщениями того же приоритета, которые размещаются после более старых сообщений с тем же приоритетом.

Да, у вас есть гарантия.

1

Вы получаете сообщение, которое является самым старым из наивысших приоритетов. Поэтому, если вы отправляете все с одинаковым приоритетом, вы всегда получаете их в том же порядке.

Смежные вопросы