Ответ
Race condition – это состояние, когда несколько потоков одновременно пытаются изменить общие данные, и результат зависит от порядка выполнения операций. В случае инкремента переменной без синхронизации часть изменений может потеряться.
Пример:
var counter = 0
fun main() {
repeat(100) {
thread {
repeat(1000) { counter++ }
}
}
Thread.sleep(2000)
println(counter) // Может быть меньше 100000
}
Решение – использовать синхронизацию (synchronized, AtomicInteger, Mutex):
val atomicCounter = AtomicInteger(0)
fun safeIncrement() {
atomicCounter.incrementAndGet()
}