Какие способы организации синхронизации потоков ты знаешь в Python?
Answer from AI
sobes.tech AI
В Python для синхронизации потоков используются различные механизмы из модуля threading:
-
Lock (мьютекс) — базовый примитив для взаимного исключения, позволяет одному потоку захватить ресурс, блокируя доступ другим.
-
RLock (рекурсивный замок) — похож на Lock, но один и тот же поток может захватывать его несколько раз без взаимной блокировки.
-
Semaphore (семафор) — ограничивает количество потоков, которые могут одновременно получить доступ к ресурсу.
-
Event (событие) — позволяет одному потоку уведомлять другие о наступлении какого-то события.
-
Condition (условие) — более сложный примитив, позволяющий потокам ждать определённого условия и уведомлять друг друга.
Пример использования Lock:
import threading
lock = threading.Lock()
shared_resource = 0
def worker():
global shared_resource
with lock:
# Критическая секция
shared_resource += 1
threads = [threading.Thread(target=worker) for _ in range(10)]
for t in threads:
t.start()
for t in threads:
t.join()
print(shared_resource) # Ожидается 10
Эти механизмы помогают избежать гонок данных и обеспечивают корректное взаимодействие потоков.