Давайте рассмотрим это предложение (Total Store Ordering):Что означает «чтение перед чтением» в памяти?
читает упорядочиваются прежде, чем читает, пишет, прежде чем пишет, и читает, прежде чем пишет, но не пишет, прежде чем читает.
Я думаю, что я почти получить основы:
- Каждый поток имеет свой собственный программный заказ (код как написано)
- В общем, процессор может изменить порядок инструкций и мы должны ограничить его исключить неправильные заказы
- ЦП также может изменять порядок загрузки и хранения памяти, и мы также должны их сдерживать
- Текущая аппаратная реализация имеет «команды сериализации», такие как
mfence
, которые являются invo ked всеми потоками для решения обеих проблем. - Оборудование, как правило, позволяет только один грязный кэш, так что это все о топить, что кэш-память:
- Запоминание нить флеши грязный кэш
- запросы Загрузка резьбы и блоков до тех пор, пока не загрязнен кэш
- Разработчики ядра заботятся о устройствах, отличных от процессора, обращающихся к памяти, но я этого не делаю.
Однако я все еще не понимаю, что означает «читает перед чтением». Вероятно, это означает, что в этих архитектурах есть неявные барьеры и инструкции по сериализации, но я не могу сказать.
Возможно, что чтение не будет переупорядочено относительно других чтений. – immibis
OP, могу я спросить, откуда вы взяли эту цитату? Обратите внимание, что ни Sparc, ни классический x86 не допускают переупорядочение нагрузки - https://en.wikipedia.org/wiki/Memory_ordering – Leeor