Почему флаг MAP_SHARED делает другие процессы сразу видимыми? - PullRequest
1 голос
/ 22 апреля 2020
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);

При использовании метода mmap параметр flags равен MAP_SHARED. Все говорят, что изменение процесса делает сразу видимыми другие процессы, так почему же другие процессы видны сразу? Не учитываете кеширование процессора?

1 Ответ

1 голос
/ 01 мая 2020

Изменения не обязательно видны немедленно . В любом многопоточном сценарии вы должны использовать надлежащие средства синхронизации / упорядочения памяти. Обычно это включает в себя операции atomi c и связанные с ними ограничения памяти, и именно эти операции разрешают синхронизацию вокруг когерентности кэша, буферов обратной записи и т. Д. c.

Подробнее о семантике порядка памяти в "C "посмотрите здесь .

...