Я хочу сделать в памяти несколько процессов, обменивающихся данными через общую память (shared memory).
Вижу два варианта использования:
- Только один процесс будет заполнять и мутировать эту общую память, а все остальные будут пользоваться результатами работы для отображения.
- Все они начнут дружно туда писать из разных потоков/процессов (и будут использовать всякие interlocked-операции, спинлоки и межпроцессную синхронизацию операционной системы)
Второй вариант, конечно, выглядит гораздо хтоничнее (в том числе привлекательнее для маньяков).
Для того, чтобы получить доступ к частям данных, планирую объявить unsafe-структуры, а к ним понаписать классы-обёртки (с упомянутой синхронизацией в их методах).
Чтобы побыстрее вьехать в тему, хочу учебник с большим количеством примеров достаточно сложного unsafe-кода в такой ситуации.
Где это может быть применено:
A) текстовый редактор, открытый пользователями в разных сессиях может позволить одновременное редактирование одного файла (по аналогии с редактором Gobby) разным пользователям.
B) многопользовательская игра с общей картой вроде freecol/freeciv/freecivac/freeorion
клиенты, конечно могут коннектиться через сокеты, а вот AI могли бы через память.
С) поиск по файлам (один процесс ищет и помнит найденные локации, остальные занимаются другими делами, а общая память используется для доступа к результатам поиска)
Я знаю, что раньше в mono была технология remoting, и там была инфраструктура для работы через shared memory. Но теперь у нас на дворе core и они всё сломали.