Sobes.tech
Junior — Middle
91

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

Сұралған компаниялар
МТС ЛинкМТС Линк

AI-дан жауап

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 будет корректно обновлено без гонок данных.