Sobes.tech
Назад к вопросам
Junior — Middle
74

Каким образом обеспечить согласованность обновления переменной при одновременной работе нескольких корутин?

Компании, где спрашивали
МТС ЛинкМТС Линк

Ответ от нейросети

sobes.tech AI

Для обеспечения согласованного обновления переменной при одновременной работе нескольких корутин в Android (Kotlin) можно использовать механизмы синхронизации, такие как:

  • Mutex из kotlinx.coroutines — позволяет блокировать критическую секцию кода, чтобы только одна корутина могла изменять переменную в момент времени.
  • Atomic переменные из пакета java.util.concurrent.atomic — обеспечивают атомарные операции без блокировок.

Пример с использованием Mutex:

import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock

val mutex = Mutex()
var sharedCounter = 0

suspend fun increment() {
    mutex.withLock {
        sharedCounter++
    }
}

fun main() = runBlocking {
    val jobs = List(1000) {
        launch {
            increment()
        }
    }
    jobs.forEach { it.join() }
    println("Counter = $sharedCounter")
}

Такой подход гарантирует, что значение sharedCounter будет корректно обновлено без гонок данных.