Sobes.tech
Back to questions
Junior — Middle
68

В каких случаях в Python возникает состояние гонки данных при работе с многопоточностью?

Companies where asked
Код Открытия

Answer from AI

sobes.tech AI

Состояние гонки данных в Python при работе с многопоточностью возникает, когда несколько потоков одновременно обращаются и изменяют общие изменяемые данные без должной синхронизации. Например, если два потока одновременно инкрементируют общий счетчик, то итоговое значение может быть некорректным из-за прерывания операций.

Это происходит потому, что операции чтения и записи не атомарны, и переключение контекста между потоками может привести к потере обновлений.

Чтобы избежать гонок данных, используют механизмы синхронизации, такие как Lock, RLock из модуля threading:

import threading

counter = 0
lock = threading.Lock()

def increment():
    global counter
    with lock:
        temp = counter
        temp += 1
        counter = temp

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

print(counter)  # Должно быть 1000

Без lock итоговое значение может быть меньше ожидаемого из-за состояния гонки.