Sobes.tech
Назад к вопросам
Junior — Middle
57

Какие способы организации синхронизации потоков ты знаешь в Python?

Ответ от нейросети

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

Эти механизмы помогают избежать гонок данных и обеспечивают корректное взаимодействие потоков.