Junior — Middle
Quelle sera la valeur de la variable compteur après le lancement de 100 coroutines, chacune augmentant sa valeur de 1 000 fois?
sobes.tech IA
Réponse de l'IA
Si 100 coroutines augmentent simultanément une même variable compteur 1000 fois sans synchronisation, la valeur finale sera probablement inférieure aux 100000 attendus (100 * 1000) en raison de conditions de course.
La raison en est que les opérations d'incrémentation ne sont pas atomiques : la lecture, l'augmentation et l'écriture peuvent être interrompues par d'autres coroutines.
Pour obtenir un résultat correct, il faut utiliser des mécanismes de synchronisation, par exemple, Mutex de 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) // Affichera 100000
}
Sans cette protection, la valeur finale sera imprévisible.