Sobes.tech
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.