Закрываем модуль про блокировки и синхронизацию оставшимися примитивами из модуля threading, которые мы ещё не разбирали по отдельности: Semaphore и Event (a Condition уже видели в уроке про RWLock, здесь покажем его в более типичном сценарии - producer/consumer).