Вот напиши хелловорлд и прошагай в гдб. Офигеешь. На самом деле ядро мапит в память специальную секцию (а-ля vdso), где размещается код, в котором есть тот самый не dmb, а ldrex/strex. Но чтоб туда попасть, оно вначале из твоего кода провалится в libc++, оттуда в libgcc, оттуда как бы сделает сисколл в секцию, где по фиксированному адресу (в ABI прописан) лежит фактическая реализация (перехода в kernel mode нет). И там ещё оно на спинлоке сделано и вызывает yield что оканчивается реальным сисколлом. В итоге атомики (сравниая с мипсом или x86) -- не просто тяжелые, а супертяжелые. И это всё обосновывается тем, что в каких-то ARMv5, которых никто в глаза не видел, не было атомиков. А теперь совместимость.
Я теперь когда пишут код понимаю, что атомиками лучше не злоупотреблять.