Junior — Middle
Welke waarde krijgt de teller-variabele na het starten van 100 coroutines, die elk hun waarde 1000 keer verhogen?
sobes.tech AI
Antwoord van AI
Als 100 coroutines tegelijkertijd dezelfde teller variabele 1000 keer verhogen zonder synchronisatie, zal de uiteindelijke waarde waarschijnlijk minder zijn dan de verwachte 100000 (100 * 1000) vanwege racecondities.
De reden is dat incrementele bewerkingen niet atomair zijn: lezen, verhogen en schrijven kunnen door andere coroutines onderbroken worden.
Om een correct resultaat te krijgen, moeten synchronisatie-mechanismen worden gebruikt, bijvoorbeeld Mutex van 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) // Zal 100000 afdrukken
}
Zonder deze bescherming is de uiteindelijke waarde onvoorspelbaar.