Я использую семафор, чтобы передать работу другому потоку в Python. Т.е. главный поток помещает элемент в очередь, а затем вызывает метод семафорного release
; рабочий поток будет вызывать acquire
на семафор, то выскочить элемент из очереди, чтобы работать.
Также есть специальный элемент TERMINATE, который мастер может помещать в очередь, который инструктирует работника закончить. Мой вопрос в том, должен ли рабочий стремиться выпустить acquire
чтобы соответствовать любой выдающейся release
на семафоре, прежде чем он прекратится? Семафор принадлежит рабочему объекту и не используется снова после завершения потока; однако процесс может быть долговечным и создавать в будущем многие рабочие объекты/потоки/семафоры.
Можно ли отказаться от семафора с ненулевым счетом? (Я подозреваю, что это так, но я хочу дважды проверить).
Независимо от того, безопасно ли, вы (субъективно) думаете, что "лучше" полностью очистить семафор до окончания?
Меня больше всего интересует поведение семафора в Python (и, более конкретно, CPython). Однако любая общая мудрость в отношении семафоров на других языках, таких как C pthreads, тоже приветствуется.
# 1: Да, безопасно отказаться от семафора с ненулевым счетом. Это просто значение в конце концов.
# 2: Лучше уменьшить количество кода. Стремитесь записать минимальное количество чистого кода для правильной реализации.