Здравствуйте, Sinclair, Вы писали:
_>>Надо пояснять для чего они служат, и что с ними сделает даже самый простенький оптимизатор? )
S>Ок, про отображение портов — согласен. Но это не имеет отношения к многозадачности/многопоточности. Разве что в самом широком смысле, который рискует порвать сову глобусом
А я нигде и не говорил о многозадачности/многопоточности. Я говорил о важности модификатора volatile для низкоуровневого программирования.
S>Про перебор i в цикле я примера увы, не понял. С учётом того, что i у нас никуда не отображена, мы крутим регистр процессора.
S>Скорее всего, речь идёт о трудноуловимой баге — программист пытается выполнить задержку ненадёжным способом.
Да, это именно задержка. И вполне себе надёжная. Т.е. понятно что аппаратный таймер лучше, но не во всех случаях его можно применить.
S>Скажем, если бы речь шла о спинлоке, то там внутри цикла должны были бы стоять не volatile, а fences — чтобы упорядочить чтения с записями из других потоков/ядер.
Для полноценного спинлока тебе не хватит ни volatile, ни fences. Для него необходимы уже атомарные операции типа CAS или аналоги, поддерживаемые процессором.