Как синхронизировать изменение переменной несколькими корутинами

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

Ответ

Для синхронизации изменений переменной между корутинами можно использовать:

  1. Mutex – блокирует доступ к ресурсу для других корутин
  2. Atomic – для простых типов (Int, Long)
  3. withContext(Dispatchers.Default) – если операции CPU-bound

Пример с Mutex:

val mutex = Mutex()
var sharedValue = 0

// В корутинах:
mutex.withLock {
    sharedValue++ // безопасное изменение
}

Для атомарных операций лучше использовать AtomicInteger:

val atomicValue = AtomicInteger(0)

// В корутинах:
atomicValue.incrementAndGet() // потокобезопасно

Выбор зависит от сценария: Mutex для сложных операций, Atomic для простых инкрементов.