volatile используется для указания компилятору и процессору, что значение переменной может быть изменено независимым потоком выполнения или внешним по отношению к текущему выполнению процессора событием (например, устройством ввода/вывода).
Применение:
- Многопоточность: Гарантирует, что каждый раз при обращении к переменной ее значение будет считываться из оперативной памяти, а не из регистра процессора или кэша. Это предотвращает оптимизации компилятора, которые могут привести к устаревшим значениям в многопоточной среде.
- Взаимодействие с оборудованием: Используется для переменных, которые отображают состояние аппаратных регистров или портов ввода/вывода, чье значение может меняться непредсказуемо для программы.
В Swift и Objective-C volatile используется аналогично C/C++.
Пример использования в C/Objective-C:
c