Почему атомарную операцию нельзя прервать

«Почему атомарную операцию нельзя прервать» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Атомарная операция — это неделимая операция, которая либо выполняется полностью, либо не выполняется вовсе. Прерывание невозможно, потому что:

  1. Аппаратная поддержка: Процессоры предоставляют инструкции (например, CAS — Compare-And-Swap), которые гарантируют выполнение операции за один такт, без возможности вмешательства других потоков или прерываний.

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

var counter = 0
// Без атомарности:
fun unsafeIncrement() {
    counter++ // Чтение -> изменение -> запись — не атомарно!
}

Атомарные операции (AtomicInteger, synchronized) исключают такие сценарии.