Junior — Middle
100 coroutine başlatıldıktan sonra, her biri değerini 1000 kez artıran sayaç değişkeni hangi değeri alacaktır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Eğer 100 coroutine aynı anda bir sayaç değişkenini 1000 kez senkronize olmadan artırırsa, son değer muhtemelen yarış koşulları nedeniyle beklenen 100000 (100 * 1000) değerden daha az olacaktır.
Bunun nedeni, artış işlemlerinin atomik olmamasıdır: okuma, artırma ve yazma diğer coroutine'ler tarafından kesilebilir.
Doğru sonucu almak için, örneğin, kotlinx.coroutines'tan Mutex kullanmak gibi senkronizasyon mekanizmaları kullanılmalıdır:
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 yazdırır
}
Bu koruma olmadan, son değer tahmin edilemez olacaktır.