Junior — Middle
86
100 корутин іске қосылғаннан кейін, олардың әрқайсысы оның мәнін 1-ге көбейтсе, есептегіш айнымалы қандай мән алады?
AI-дан жауап
sobes.tech AI
Если 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
}
Без такой защиты итоговое значение будет непредсказуемым.