Я пытаюсь разработать приложение с одним производителем и несколькими потребителями. Производители - это один процесс, и каждый потребитель - это один процесс. Общий ресурс - это своего рода буфер в общей памяти.Неблокирующий производитель разделяемой памяти, использующий условие форсированного интерпроцесса для уведомления
Производитель должен работать полностью независимо от потребителей. В любом случае его нельзя блокировать. Поэтому потребители несут ответственность за проверку достоверности данных, которые они считывают из общей памяти, и обрабатывают их, если производитель уже перезаписал данные. (Они делают это с использованием какого-то хеширования. Не важно.)
Потребители должны быть проинформированы о наличии новых данных в буфере. Я думаю, что условия для промежуточного процесса подходят для этой утилиты. (Более подходящими были бы сигналы boost2, но эта библиотека не работает в режиме interprocess).
Условие всегда требует мьютекса. Но мне не нужен мьютекс в моем продюсере. В потребителя мне нужно только мьютекс для условия # wait.
Можно ли использовать кодировку # notify_all только в коде производителя и не использовать мьютексы? Или это злоупотребление библиотекой?
Заранее спасибо
Почему бы вам не использовать трубу/FIFO, которую читают потребители, и производители пишут? Вам не пришлось бы иметь дело с синхронизацией, и это значительно упростило бы дизайн. –
Я использую какой-то ФИФО. Но я хочу получать уведомления, когда новые данные доступны в FIFO. – hami
Неблокирование и уведомление о состоянии - это противоречия. – sehe