Встречается на собеседованиях • сегодня

Почему возникает состояние гонки между потоками

Состояние гонки (race condition) возникает, когда несколько потоков одновременно обращаются к общим данным, и хотя бы один из них изменяет эти данные. Результат выполнения программы становится непредсказуемым, так как зависит от порядка выполнения потоков.

Пример:

python
import threading

counter = 0

def increment():
global counter
for _ in range(100000):
counter += 1

threads = []
for _ in range(5):
t = threading.Thread(target=increment)
threads.append(t)
t.start()

for t in threads:
t.join()

print(counter) # Результат может быть меньше 500000

text

Проблема в том, что операция `counter += 1` не атомарна - она состоит из чтения, изменения и записи значения. Потоки могут перекрываться на любом этапе.

Решение - использовать блокировки (Lock) или другие механизмы синхронизации:
```python
lock = threading.Lock()

def increment():
    global counter
    for _ in range(100000):
        with lock:
            counter += 1
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы