Junior — Middle
96
¿En qué casos surge una condición de carrera en Python al trabajar con múltiples hilos?
Empresas donde se preguntó
Код Открытия
Respuesta de la IA
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 итоговое значение может быть меньше ожидаемого из-за состояния гонки.