Mmap atomi c? - PullRequest
       29

Mmap atomi c?

6 голосов
/ 21 января 2020

Являются ли mmap вызовами atomi c в их действии?

То есть, изменение отображения, сделанное mmap, отображается атомарно для других потоков, получающих доступ к затронутой области?

В качестве лакмусовой бумажки рассмотрим случай, когда вы делаете mmap в файле всех нулей (из потока T1 , который на данный момент является единственным потоком), затем запускаете второй поток T2 чтение из региона. Затем снова в T1 (исходный поток) выполните второй mmap вызов для той же области, заменив сопоставление новым для файла всех.

Возможно ли для потока чтения читать единицу с некоторой страницы (то есть увидеть вторую действующую mmap), а затем впоследствии читать ноль с какой-то страницы (то есть, увидеть первую действующую карту)?

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

1 Ответ

0 голосов
/ 21 января 2020

Отображение памяти происходит на уровне процесса и поэтому мгновенно просматривается всеми потоками, которые являются частью этого процесса.

...