Junior — Middle
88
Welchen Wert hat die Zählvariable nach dem Start von 100 Koroutinen, die jeweils ihren Wert um 1.000 Mal erhöhen?
Antwort von AI
sobes.tech KI
Если 100 корутин одновременно увеличивают одну и ту же переменную-счетчик по 1000 раз без синхронизации, итоговое значение, скорее всего, будет меньше ожидаемых 100000 (100 * 1000) из-за условий гонки.
Причина в том, что операции инкремента не атомарны: чтение, увеличение и запись могут прерываться другими корутинами.
Чтобы получить корректный результат, нужно использовать механизмы синхронизации, например, Mutex из kotlinx.coroutines:
import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
var counter = 0
val mutex = Mutex()
fun main() = runBlocking {
val jobs = List(100) {
launch {
repeat(1000) {
mutex.withLock {
counter++
}
}
}
}
jobs.forEach { it.join() }
println(counter) // Выведет 100000
}
Без такой защиты итоговое значение будет непредсказуемым.