Защищают ли Coroutines от race condition

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

Ответ

Coroutines сами по себе не защищают от race condition. Они лишь упрощают асинхронный код, но параллельный доступ к общим ресурсам всё равно требует синхронизации.

Для защиты используй:

  1. Mutex - блокирует доступ к критической секции
  2. @Volatile - для примитивов
  3. Потокобезопасные коллекции (ConcurrentHashMap и т.д.)

Пример с Mutex:

val mutex = Mutex()
var counter = 0

fun safeIncrement() = runBlocking {
    mutex.withLock {
        counter++
    }
}