Функции msgctl()
, msgget()
, msgrcv()
и msgsnd()
— это функции очереди сообщений System V IPC. Они будут работать на вас, но они довольно тяжелые. Они стандартизированы POSIX.
POSIX также предоставляет более современный набор функций, mq_close()
, mq_getattr()
, mq_notify()
, mq_open()
, mq_receive()
, mq_send()
, mq_setattr()
и mq_unlink()
что может быть лучше для вас (такое смущение от богатства).
Однако вам нужно будет проверить, какой из них установлен на ваших целевых платформах по умолчанию. Особенно во встроенной системе может случиться так, что вам придется их настроить или даже установить, потому что их нет по умолчанию (и то же самое может быть верно для общей памяти и семафоров).
Основное преимущество любого из наборов средств обработки сообщений заключается в том, что они предварительно отлажены (вероятно) и, следовательно, в них уже решены проблемы параллелизма, в то время как если вы собираетесь делать это самостоятельно с общей памятью и семафорами, у вас есть много возможностей. работы, чтобы достичь того же уровня функциональности.
Итак, (повторно) используйте, когда можете. Если есть возможность, используйте одну из двух систем очередей сообщений, а не изобретайте собственную. Если вы в конечном итоге обнаружите, что есть узкое место в производительности или что-то подобное, вы можете изучить возможность написания собственных альтернатив, но до тех пор используйте повторно!
05.03.2012