Я пишу многопоточный код C и только что наткнулся на этот вопрос StackOverflow. Похоже, что компилятор позаботится о том, чтобы ввод-вывод в разные части структуры никогда не пересекался и не вызывал какого-либо состояния гонки.
Мой вопрос в качестве расширения заключается в том, существуют ли аналогичные гарантии для двух разных структур, которые пространственно близки в общей памяти?
Изменить: пространственно близко, как на «той же странице». Могут ли две записи из двух разных потоков на одну и ту же страницу вызвать состояние гонки? Один парень может в конечном итоге сбросить устаревшую страницу из своего кеша в память (возможно ли это?).
Скажем, у меня есть два бита в виде собственных структур в общей памяти. Если они окажутся смежными, может ли один поток, записывающий в один из них, перезаписать другой? Должен ли я сериализовать все потоки с одной блокировкой для доступа к любой из этих структур в общей памяти?
Или все это и проблема в указанном вопросе в любом случае представляют риск для C99?