Junior — Middle
100 ta korutina ishga tushirilgandan so'ng, har biri uning qiymatini 1000 marta oshiradigan hisoblagich o'zgaruvchisi qanday qiymat oladi?
sobes.tech AI
AIdan javob
Agar 100 korutin bir vaqtning o'zida bir xil hisoblagich o'zgaruvchisiga 1000 marta oshirishni amalga oshirsa, yakuniy qiymat ehtimoliy ravishda kutilgan 100000 (100 * 1000) dan kam bo'ladi, chunki raqobat sharoitlari mavjud.
Buning sababi, inkrement operatsiyalari atomik emas: o'qish, oshirish va yozish boshqa korutinlar tomonidan to'xtatilishi mumkin.
To'g'ri natijaga erishish uchun, masalan, kotlinx.coroutines'dan Mutex kabi sinxronizatsiya mexanizmlaridan foydalanish kerak:
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 ni chiqaradi
}
Bunday himoya bo'lmasa, yakuniy qiymat oldindan aytib bo'lmaydi.