Vit (05.11.2017 10:34, просмотров: 232) ответил SciFi на Начали терзать сомнения. Скажем, UART на прерываниях, кольцевой буфер, unsigned int volatile head, tail; char volatile fifo[]. Вот там эти барьеры нужны?
Инкремент или декремент хоть и выполняется быстро, но загрузить значение "на место" нужно. Часто после этого выполняется сравнение. При volatile компилятор должен брать значение по адресу хранения. Где-то тут может быть неопределенность. Я индексы стараюсь инкрементировать после обращения к буферу. Но это не потому что осознаю возможную неопределенность поведения, а просто мне удобно делать буферы размеров 2 в степени и оперировать "бесконечными" (автопереполняемыми) индексами (при обращении к буферу маскирую size-1). Недавно напоролся (на w7500p под mBed) на "проскальзывание" - пока проект только перегнал на оффлайн компилятор и ещё не разбирался. Может как раз оно.