Check
Как правильно использовать блокировки (`threading.Lock`, `RLock`) в Python, чтобы избежать дедлоков? Приведите пример с контекстным менеджером.

Lock и RLock

Ответ 1 / 1

Лучше всего использовать блокировки через контекстный менеджер `with`, чтобы гарантировать их освобождение даже при исключении. Пример: ```python import threading lock = threading.Lock() counter = 0 def worker(): global counter with lock: tmp = counter tmp += 1 counter = tmp ``` Чтобы избежать дедлоков: - следовать единому порядку захвата нескольких блокировок во всех потоках; - минимизировать время удержания lock; - по возможности использовать более высокоуровневые примитивы (Queue, concurrent.futures).