Я использую семафор, чтобы передать работу другому потоку в Python. То есть главный поток поместит элемент в очередь, а затем вызовет метод семафора release
; рабочий поток вызовет acquire
на семафоре, а затем вытолкнет элемент из очереди для работы.
Есть также специальный элемент TERMINATE, который мастер может поставить в очередь, который дает команду работнику завершиться. У меня вопрос: должен ли работник стремиться к выдаче acquire
s, чтобы сопоставить любые выдающиеся release
s на семафоре, прежде чем он завершится? Семафор принадлежит рабочему объекту и больше не используется после завершения потока; однако этот процесс может быть долгоживущим и в будущем создаст много рабочих объектов / потоков / семафоров.
Безопасно ли оставлять семафор с ненулевым счетом? (Я подозреваю, что это так, но я хочу перепроверить.)
Независимо от того, безопасно ли это, вы (субъективно) думаете, что «лучше» полностью очистить семафор перед окончанием?
Меня больше всего интересует поведение семафора в Python (а точнее, CPython). Однако, любая общая мудрость относительно семафоров в других языках, таких как pthreads Си, также будет приветствоваться.