Как вы заметили, при совместном использовании памяти между процессами нет места для рекламы / потребления ресурса. Поэтому в дополнение к настройке области общих адресов вам, вероятно, потребуется настроить некую внеполосную инфраструктуру для согласования.
Очевидный выбор - создать совместно используемый / именованный мьютекс Win32 для координации действий. Процесс эмитента может создать объект синхронизации и затем эффективно ожидать его (т. Е. Без вращения, так как это примитив Kernel32
), пока процесс вызывающего не подключится и не освободит сервер.
Это служит "push" уведомлением (на сервер), чтобы все началось; обычно это делается только для целей инициализации, во время которых соединение клиент / сервер устанавливает (неопубликованное) частное соединение, если необходимо, для продления времени жизни их сеанса. Если расчетная ожидаемая пропускная способность имеет определенный тип, они могут даже установить асинхронное соединение без блокировки с помощью CMPXCHG
-ing на общей памяти, но любой механизм сигнализации будет работать, включая каждый, обеспечивающий взаимный доступ для использования друг другом.
Таким образом, в то время как именованные каналы имеют встроенные процедуры настройки / демонтажа, недостатком является то, что у вас есть свои собственные. Но у вас, безусловно, есть все, что вам нужно, чтобы развернуть свою собственную диспетчеризацию, и преимущество в том, что вы можете совместно использовать куски памяти взад-вперед, вместо того, чтобы выяснять, как сериализовать все в канал.
На практике вам, вероятно, вообще не нужно создавать разделяемую память до тех пор, пока клиент не вызовет, после чего клиент или сервер отобразят новый диапазон совместно используемой памяти для частного использования между собой. Если вы хотите избежать использования именованных каналов, то выясните, как передать (по крайней мере, минимальный) объем информации о настройке, а именно, адрес памяти qword этого блока, по крайней мере, оставить в качестве упражнения для читатель. Это загадка начальной загрузки (или проблема курицы / яйца, если вы предпочитаете).