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