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 итоговое значение может быть меньше ожидаемого из-за состояния гонки.