Junior — Middle
¿Qué valor tendrá la variable contador después de ejecutar 100 corutinas, cada una de las cuales aumentará su valor en 1 mil veces?
sobes.tech AI
Respuesta de la IA
Si 100 corutinas aumentan simultáneamente una misma variable contador 1000 veces sin sincronización, el valor final probablemente será menor que los 100000 esperados (100 * 1000) debido a condiciones de carrera.
La razón es que las operaciones de incremento no son atómicas: la lectura, el aumento y la escritura pueden ser interrumpidos por otras corutinas.
Para obtener un resultado correcto, es necesario usar mecanismos de sincronización, por ejemplo, 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) // Imprimirá 100000
}
Sin esta protección, el valor final será impredecible.