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

Discussion in 'WASM.X64' started by Sercher, Nov 17, 2010.

  1. Sercher

    Sercher New Member

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

    Clerk Забанен

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

    Sercher New Member

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

    Sercher New Member

    Blog Posts:
    0
    Joined:
    Feb 11, 2008
    Messages:
    59
    спасибо за ответ.