ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
660789 Топик полностью
fk0, легенда (17.03.2016 12:31, просмотров: 149) ответил fk0 на Зависит от... В общем случае volatile не является memory barrier'ом, ровно как и наоборот, явный memory barrier (__sync_syncrhronize() в gcc) может ничего никуда не записать, если без volatile. Вот страшненькая история по ссылкам. Могу добавить,
Тебе вдогонку ещё баг. Операция txhead++ нихрена не атомарная на многих архитектурах: честный инкремент умеют только m68k, x86, z80 и прочее CISC старьё, да и там жди проблем если процессоров больше одного. На современных RISC это, как правило, две-три инструкции: чтение, суммирование, запись. Прерывание может быть после первой. Впараллель насуммируют ерунду. GCC имеет для того builtins типа __sync_fetch_and_add(), или городи вручную, если нет: для современных процов есть что-то вроде CAS в каком-то виде, на старых только делать спинлок... но там может найтись атомарный инкремент.
[ZX]