ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
998945 Топик полностью
fk0, легенда (25.04.2020 22:20, просмотров: 254) ответил lloyd на Просветите. Если atomic<int>, то просто запись в память + dmb?
Вот напиши хелловорлд и прошагай в гдб. Офигеешь. 

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


Я теперь когда пишут код понимаю, что атомиками лучше не злоупотреблять.


[ZX]