Назад к вопросам
Junior — Middle
51
Каким образом можно предотвратить условия гонки в многопоточных программах?
Ответ от нейросети
sobes.tech AI
Условия гонки возникают, когда несколько потоков одновременно обращаются к общим ресурсам без должной синхронизации, что приводит к непредсказуемому поведению программы.
Для предотвращения условий гонки в Python можно использовать:
- Блокировки (Locks) из модуля
threading. Они позволяют гарантировать, что только один поток выполняет критическую секцию кода в конкретный момент времени. - Семафоры (Semaphores) для ограничения количества потоков, одновременно работающих с ресурсом.
- Мьютексы (Mutexes) — специализированные блокировки.
- Использование потокобезопасных структур данных, например, из модуля
queue.
Пример с использованием блокировки:
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
with lock: # Критическая секция
temp = counter
temp += 1
counter = temp
threads = []
for _ in range(1000):
t = threading.Thread(target=increment)
threads.append(t)
t.start()
for t in threads:
t.join()
print(counter) # Ожидается 1000
Без блокировки значение counter может быть меньше 1000 из-за условий гонки.