IT-словарь › Программирование › volatile

volatile

Программирование Svenska → Обновлено: 2026-11-02

Квалификатор типа в C и C++, сообщающий компилятору, что каждое чтение и запись переменной должны действительно произойти.

Обычно компиляторы исходят из того, что память меняется только самой программой. Поэтому цикл ожидания флага можно превратить в бесконечный, а две подряд идущие записи по одному адресу — слить в одну. Для аппаратного регистра или флага, выставляемого прерыванием, обе оптимизации фатальны. volatile, появившийся с ANSI C в 1989 году, отключает их для одной конкретной переменной.

Больше он ничего не делает. Он не даёт ни атомарности, ни упорядочения относительно других переменных, а процессор по-прежнему вправе переставлять обращения. Потокам на нескольких ядрах нужны атомарные операции и барьеры памяти; в документации ядра Linux есть целая страница под названием «Why the volatile type class should not be used». Кстати, volatile в Java — совсем другое дело, с настоящими гарантиями упорядочения: то же слово, другие обещания.

← Назад к словарю