Ответ
var counter = 0
val jobs = List(100) {
GlobalScope.launch {
repeat(1000) { counter++ }
}
}
runBlocking { jobs.forEach { it.join() } }
println(counter) // Результат будет меньше 100000
Без синхронизации результат будет меньше ожидаемого (100000) из-за race condition. Инкремент не атомарен - читает, изменяет и записывает значение. Для корректного результата используйте:
AtomicIntegerMutexsynchronizedблок@Volatile+ атомарные операции
Пример с AtomicInteger:
val counter = AtomicInteger(0)
// ... остальной код без изменений
println(counter.get()) // 100000