На MacOSX, в C ++, как сделать межпроцессное взаимодействие через общую память без спин-блокировки? - PullRequest
1 голос
/ 05 марта 2010

У меня есть два процесса:

Producer
and
Consumer

они имеют общую mmaped общую область памяти

Memory

Теперь, продюсер пишет вещи в память. Потребитель читает вещи из памяти.

I would prefer Consumer not to spin wait with Memory is empty.
I would prefer Producer not to spin wait when Memory is full.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 06 марта 2010

Это напоминает проблему Обедающих философов . Если ваша платформа поддерживает это, вы можете использовать условные переменные shared для нескольких процессов. С такими общими условными переменными ваш Producer может сигнализировать вашему Consumer о необходимости прочитать Memory, когда данные доступны, и наоборот, когда Memory пусто. Не забудьте проверить ложное пробуждение .

Вам нужно проверить, поддерживает ли реализация MacOSX pthread переменные условия, совместно используемые процессами. См. мой ответ на ваш вопрос, связанный с мьютексом , чтобы определить, как это сделать. Ответ применим и к условным переменным.

0 голосов
/ 06 марта 2010

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

...