Что такое состояние гонки (Race condition)
Python
Middle
Без компании
Что такое состояние гонки (Race condition)
Ответы
Состояние гонки (Race condition) — это ошибка, возникающая, когда поведение программы зависит от порядка выполнения потоков или процессов, которые конкурируют за доступ к общим данным. Если результат зависит от непредсказуемой последовательности событий, это может привести к неожиданным и ошибочным результатам.
**Пример:**
```
import threading
counter = 0
def increment():
global counter
for _ in range(100000):
counter += 1
threads = []
for _ in range(10):
thread = threading.Thread(target=increment)
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
print(counter) # Может быть меньше 1_000_000
```
**Почему возникает:**
Операция `counter += 1` не атомарна:
- Чтение значения `counter`
- Увеличение на 1
- Запись нового значения
Если два потока одновременно читают одно значение, оба увеличат его на 1 и запишут одинаковый результат, потеряв одно изменение.
**Решение:**
Использовать блокировки (`threading.Lock`), атомарные операции или thread-safe структуры.