Должен ли я получить блокировку для записи в ЛЮБУЮ общую память? - PullRequest
0 голосов
/ 07 июня 2019

Я пишу многопоточный код C, и я только что натолкнулся на этот вопрос StackOverflow . Похоже, что компилятор позаботится о том, чтобы ввод / вывод для разных частей структуры никогда не пересекался и не вызывал какие-либо условия гонки.

Мой вопрос как расширение: есть ли аналогичные гарантии для двух разных структур, которые пространственно близки в разделяемой памяти?

Редактировать: Пространственно близко, как на «той же странице». Могут ли две записи из двух разных потоков на одну и ту же страницу вызвать состояние гонки? Один парень может в конечном итоге сбросить устаревшую страницу из своего кэша в память (возможно ли это?).

Скажем, у меня есть два бита, как их собственные структуры, в общей памяти. Если они заканчивают тем, что были смежными, может ли один поток, записывающий один из них, перезаписать другой? Придется ли мне сериализовать все потоки с одной блокировкой для доступа к любой из этих структур в общей памяти?

Или все это, и проблема в указанном вопросе, все равно представляет риск в C99?

...