process — C ++ координирует процессы при запуске?

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

0

Решение

Я думаю, что названный семафор — хороший выбор. Ваше приложение производителя и потребителя должно согласовывать (жестко) имя семафора, например, / tmp / mySem, и только производитель должен создавать и публиковать семафор, в то время как потребители должны ждать существования и состояния семафоров.

0

Другие решения

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

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

Вы можете посмотреть на детали повышения барьера в этом страница

0

По вопросам рекламы [email protected]