Публичные volatile-операции над атомарными типами стали доступны

31.08.2026

В состав ядра вынесены варианты атомарных операций, запрещающие компилятору переставлять и удалять обращения к памяти. Раньше такие операции требовали обращаться к системному вызову напрямую.

Чем отличается от обычной атомарной операции

Обычная атомарная операция гарантирует, что обращение выполнится один раз и в нужном порядке относительно других атомарных. Но компилятор не считает это обращение обычным чтением или записью: он может решить, что два подряд идущих чтения изменить не могут, и выполнить одно.

Для взаимодействия с памятью, которой управляет устройство, это неверно. Устройство может изменить значение между двумя чтениями, и компилятор, удалив второе, нарушит протокол обмена. Значение «volatile» означает: это обращение к памяти, а не к переменной, и трогать его нельзя.

Зачем это нужно

Прямое взаимодействие с устройствами без посредника — буферы, отображённые в память, дескрипторы, разделяемые регистры. Такое встречается в драйверах, в коде ядер и в низкоуровневых библиотеках.

Раньше для этого требовалось либо писать в unsafe-обвязке, либо использовать ассемблер. Теперь есть штатный способ — с тем же контролем времени жизни и разыменования, что и остальные атомарные типы.

Оригинал

libcore: expose volatile atomic operations

Упоминаний: 1 · Просмотров: 2