Back to questions
Middle — Middle+
73
Каким образом обеспечить безопасный доступ нескольких потоков к общей переменной и избежать гонок данных?
Answer from AI
sobes.tech AI
Для безопасного доступа нескольких потоков к общей переменной в Python обычно используют механизмы синхронизации из модуля threading. Самый распространённый способ — использовать Lock (блокировку), которая гарантирует, что в один момент времени только один поток может изменить или прочитать переменную.
Пример:
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 возможны гонки данных, когда несколько потоков одновременно читают и записывают переменную, что приводит к некорректным результатам. Кроме Lock существуют и другие примитивы, например, RLock, Semaphore и Event, которые применяются в зависимости от задачи.