Закрытие отображения файла

Тема в разделе "WASM.X64", создана пользователем Sercher, 17 ноя 2010.

  1. Sercher

    Sercher New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    59
    Есть процесс создающий мэппированный именной блок памяти, это же блок отображают в свое пространство другие процессы для обмена между собой информацией, как сделать так чтобы при закрытии одного из процессов, удалялось отображение блока в других процессах.
    П.С. Посылать сообщение о закрытие внутри блока не выходит т.к. процессов много, и качество их написания разное, отсюда частые сбои в их работе. Вот и получается когда главный синхронизирующий доступ процесс хочет изменить обьем отображаемой памяти, он должен пересоздать ее но с новым размером, он удаляет блок а создать новый с тем же именем не может так как один из процессов весит не делая UnmapViewOfFile... и имя занято.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Использовать NtPulseEvent. Во всех процессах должны быть потоки ждущие на этом событии. Когда произойдёт сигнализация эвента поток должен перемапить секцию. При этом выполнив цикл ожидания, либо используя ожидание на есчо одном евенте, который будет сигнализирован при создании новой секции. Тоесть можно использовать пару событий(EventPair).
    Можно отказаться от использования сихрообьектов и выполнять проверку флага в проекции перед началом обмена данными. Если флаг окажется взведён, то перемапить проекцию.
     
  3. Sercher

    Sercher New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    59
    Я думал об синхронизации через события и симофоры но в итоге выходит что при большом кол-ве процессов это расточительно т.к в x64 под каждый поток выделяется как минимум 64кб.
     
  4. Sercher

    Sercher New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    59
    спасибо за ответ.