Атомарность WriteFile

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 17 сен 2007.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Есть один файл, открытый на запись несколькими процессами, FILE_SHARE_WRITE. Каждый процесс что-то пишет в файл. По сути это лог.
    Атомарна ли запись в файл на уровне вызова WriteFile, или же данные могут "перемешиваться"? Если не атомарна - то можно ли добиться атомарности без использования глобальных объектов синхронизации?
     
  2. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Атомарность не гарантируется ИМХО.

    Хм. Глобальных = ядерных? Или как? Синхронизацию ты можешь и сам сделать, в принципе, но зачем изобретать велосипед.

    Лучше наверное сделать отдельный процесс-"писатель лога", и по пайпам/сокетам писать туда запросы на помещение записей в лог
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Глобальный - всмысле например именованый мутекс. Избавиться от глобальных объектов синхронизации мне нужно потому что ввиду своей специфики приложение может законно убиваться осью в самый неожиданный для него момент. Такой стрем никак не вяжется с использованием глобальных мутексов по, надеюсь, понятным причинам.


    Этот вариант уже имеется на готове, но все же хочется решить вопрос "малой кровью" :)
     
  4. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Ага. Оптексы у Рихтера не смотрел, кстати? Там через мэппинги реализовано.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Причины непонятны, т.к. если система прибьёт владельца мьютекса, то она, естесственно, освободит последний.
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    IceStudent

    В том-то и дело, что это не владелец. Если система прибьет процесс, то мутекс перейдет в стейт WAIT_ABANDONED. А это не равно ReleaseMutex.
     
  7. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    атомарна
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    t00x

    Откуда такая информация?
     
  9. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    информация основана на правилах, составленных опытным путём )
     
  10. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    t00x
    одного опыта не хватит. где написана что атомарна?
    то есть при записи оного гига это будет атомарная операция?
     
  11. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    нтфс.сис при получении IRP_MJ_WRITE залочит файл до окончания операции
    гиг - значит гиг

    зато последовательность записи разных IRP вообще говоря произвольна, может пойти в запись сначала тот что пришел позже, так что мьютексы не помешают, или дожидаться окончания WriteFile
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    а как же LockFile?
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    z0mailbox

    А как на счет FAT32 ?
     
  14. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    Great
    я на практике сталкивался только с тем что после LockFile файл не открыть до Unlock-а
    на этом даже защиту(!) сделали, есть такая инфосистема - кодекс
    как нтфс.сис его реализует - не разбирался
    в FastIO есть куча всяких Lock-ов - ни разу не видел чтоб они вызывались, мож на СУБД где-нить

    _DEN_
    давно не ковырялся в ней, думаю что так же как и нтфс

    драйвера от микрософта думаю все так работают, ну кроме маппед-файлов конечное, там полная Ж с синхронизацией и когерентностью, но это собственно документировано в мсдн