Я пытаюсь установить межпроцессное взаимодействие на C/C++ в среде Windows.
Я создаю файл страницы общей памяти, и два процесса получают доступ к этому файлу. Это вот так:
Процесс 1: Инициализировать разделяемую область памяти. Подождите, пока Process2 заполнит его.
Process2: Получить дескриптор области общей памяти. Положите в него вещи.
Я также создаю именованный мьютекс в процессе1. Теперь процесс1 получает право собственности на мьютекс вскоре после его создания (используя WaitSingleObject). Очевидно, в области памяти ничего нет, поэтому мне нужно освободить мьютекс. Теперь мне нужно дождаться заполнения памяти, а не пытаться снова захватить мьютекс.
Я имел в виду условные переменные. Процесс 2 сигнализирует условной переменной, как только она заполняет область памяти, и процесс 1 немедленно получает информацию.
Однако, согласно документации MS по переменным состояния, они не используются совместно процессами, что ясно из их инициализации, поскольку они не являются named
.
Кроме того, область разделяемой памяти может содержать до одного элемента в любой момент времени, что означает, что процесс 2 не может повторно заполнить ее после ее заполнения, если только процесс 1 не извлечет свою информацию.
Из данного описания видно, что для этой цели лучше всего подходят условные переменные (или мониторы). Так есть ли способ обойти это?