Эксклюзивный монитор (LDREX/STREX)
Аппаратный механизм ARM для атомарного «прочитать–изменить–записать»: загрузка помечает адрес, а запись удаётся, только если за это время к нему никто не прикасался.
LDREX читает значение и просит монитор следить за этим адресом. Программа вычисляет новое значение, и STREX пытается записать его обратно. Если тем временем что-то произошло — другое ядро записало туда или вклинилось прерывание, — запись не удаётся, STREX возвращает 1, и код идёт на новый круг. Принцип называется load-linked/store-conditional и был ещё в MIPS; в ARM он появился с ARMv6.
В Cortex-M3 и новее каждый вход в исключение сбрасывает монитор, так что инкремент в главном цикле не столкнётся с таким же инкрементом в обработчике прерывания. В Cortex-M0 этих инструкций нет вовсе, поэтому атомарные операции там делают, маскируя прерывания внутри критической секции.