Увеличение номера очереди сообщений SysV
У меня есть сценарий, где:
1: есть процесс чтения и процесс записи, эти процессы взаимодействуют через очередь сообщений SysV.
2: Процесс записи быстрее, чем процесс чтения, то есть процесс записи пишет сообщения в очереди быстрее, чем процесс чтения читает сообщение и очищает очередь, например, если у меня есть 8 сообщений в очереди (одиночная очередь сообщений) и процесс чтения еще не прочитал одно сообщение в то время, когда процесс записи пытается записать (msgsnd) 9-е сообщение в очередь.
3: Что произойдет, если мое сообщение будет перезаписано?
4: или мое последнее или первое сообщение в очереди будет перезаписано?
5: или вся очередь будет перезаписана?
6: иначе 9-е сообщение будет потеряно?
7: Как я могу убедиться, что ни один из этих сценариев не произойдет, и я не потеряю ни одно новое входящее сообщение, и никакие существующие сообщения не будут перезаписаны?
8: Как я могу справиться с этой ситуацией?
С уважением
1 ответ
О пункте 3 на странице MSGSND сказано:
When msgsnd() fails, errno will be set to one among the following values:
...
EAGAIN The message can't be sent due to the msg_qbytes limit for the queue
and IPC_NOWAIT was specified in msgflg.
поэтому вы не сможете добавить еще одно сообщение в очередь, и вам нужно будет хранить их где-то еще. Если вы указали IPC_NOWAIT при открытии очереди, то сообщение будет потеряно.