Как бы вы объединили threading.RLock
с threading.Semaphore
? Или такая структура уже существует?Python: построение реентерабельного семафора (объединение RLock и семафора)
В Python существует примитив для блокировки реентера, threading.RLock(N)
, который позволяет одному и тому же потоку приобретать блокировку несколько раз, но ни один другой поток не может. Существует также threading.Semaphore(N)
, что позволяет блокировать блокировку N
раз перед блокировкой. Как объединить эти две структуры? Я хочу до N
отдельных потоков, чтобы иметь возможность получить блокировку, но я бы хотел, чтобы каждый отдельный замок на потоке был реентерабельным.