Ответ
Гонка чтения-записи (race condition) возникает, когда несколько потоков/процессов одновременно обращаются к общим данным, и хотя бы один из них выполняет запись. Результат операции зависит от порядка выполнения потоков, что может привести к неожиданным ошибкам.
Пример на Java:
class Counter {
private int count = 0;
public void increment() {
count++; // Неатомарная операция: чтение-изменение-запись
}
public int getCount() {
return count;
}
}
Если два потока одновременно вызовут increment(), возможен сценарий:
- Оба потока читают
count = 0 - Оба увеличивают значение локально
- Оба записывают
1вместо ожидаемого2
Решение - синхронизация:
public synchronized void increment() {
count++;
}
Или использование атомарных типов:
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}