С помощью C ++ я планирую иметь producer
процесс записи данных vector
а затем несколько consumer
процессы чтения этих данных. Там будет сегмент общей памяти (Boost :: Interprocess), где данные vector
будет храниться Проблема в том, что я не контролирую порядок запуска процессов сторонним приложением, возможно, consumer
может начаться до producer
произвел какие-либо данные. Какие механизмы доступны для координации процессов, чтобы consumer
процессы могут быть приказаны терпеливо ждать, пока producer
сигнализирует о готовности данных; независимо от того, в каком порядке запускаются процессы?
Я думаю, что названный семафор — хороший выбор. Ваше приложение производителя и потребителя должно согласовывать (жестко) имя семафора, например, / tmp / mySem, и только производитель должен создавать и публиковать семафор, в то время как потребители должны ждать существования и состояния семафоров.
Если создание общей памяти является обязанностью процесса производителя, то вы можете использовать повышающий барьер для синхронизации запуска.
Вы можете создать барьер для создания разделяемой памяти, возможно, некоторое количество заданий для развертывания. После достижения этого барьера потребительские процессы могут продолжать обрабатывать их.
Вы можете посмотреть на детали повышения барьера в этом страница