Какие можешь использовать механизмы синхронизации потоков
Python
Junior
Без компании
Какие можешь использовать механизмы синхронизации потоков
Ответы
В Python для синхронизации потоков можно использовать:
- **Lock (блокировка)** - базовый примитив, позволяет только одному потоку выполнять критическую секцию:
```
from threading import Lock
lock = Lock()
with lock:
# критическая секция
```
- **RLock (реентерабельная блокировка)** - позволяет одному потоку захватывать блокировку несколько раз.
- **Semaphore** - ограничивает количество потоков, которые могут одновременно получить доступ к ресурсу:
```
from threading import Semaphore
sem = Semaphore(3) # максимум 3 потока
sem.acquire()
# работа с ресурсом
sem.release()
```
- **Condition** - позволяет потокам ждать определенного условия:
```
from threading import Condition
cond = Condition()
with cond:
while not resource_available:
cond.wait()
# работа с ресурсом
```
- **Event** - простой механизм для уведомления между потоками:
```
from threading import Event
event = Event()
# поток 1
event.wait() # ждет установки флага
# поток 2
event.set() # уведомляет ожидающие потоки
```
- **Barrier** - синхронизирует заданное количество потоков в определенной точке.
Для сложных сценариев лучше использовать `threading` или `multiprocessing` модули, а для IO-bound задач - asyncio.