Sobes.tech
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, которые применяются в зависимости от задачи.