Чтение незаписанной страницы из другого процесса

У меня есть процесс-производитель, который записывает в файл mmap, и процесс-потребитель, который читает из него. Это на линуксе.

Если производитель вносит изменения в mmap и он не очищается мгновенно, что происходит, когда потребитель обращается к нему? Получит ли он старую версию с диска, или он достаточно умен, чтобы получить не сброшенную страницу?


person matt    schedule 13.04.2011    source источник


Ответы (1)


На mmap() странице руководства:

MAP_SHARED

Поделитесь этим сопоставлением со всеми другими процессами, которые сопоставляют этот объект. Сохранение в регион эквивалентно записи в файл. Файл может не обновляться до тех пор, пока не будут вызваны msync(2) или munmap(2).

Итог: изменения будут немедленно видны другим процессам, если вы укажете это при вызове mmap(). Согласно документации, вы должны использовать либо MAP_SHARED, либо MAP_PRIVATE, которые управляют поведением в отношении других процессов, отображающих ту же область файла.

person thkala    schedule 13.04.2011
comment
Таким образом, несмотря на то, что изменения между процессами распространяются немедленно, диск может фактически не получить изменения до тех пор, пока вы не вызовете msync. - person CMCDragonkai; 08.11.2017