Re, «Зачем нам нужны ... конструкции?»
Потому что слоев абстракции и повторного использования кода .
Например, не нужно , чтобы иметь очередь блокировки. Если у вас есть массивы и указатели, мьютекс и переменная условия, вы можете использовать их для реализации всего, что вы могли бы реализовать с помощью очереди блокировки. Но ваш код будет намного сложнее читать, потому что в каждом месте, где вы могли просто позвонить q.put(...)
или q.take()
, вам придется вместо этого написать целую кучу строк кода.
Блокирующая очередь - это полезная абстракция : она объединяет идеи более низкого уровня в более простую функцию более высокого уровня.
Вам не нужно семафор , если у вас есть очередь блокировки. Все, что вы можете сделать с семафором, вы можете сделать, поместив бессмысленные токены в очередь и затем удалив их. Семафор действительно является более простой версией идеи очереди, и он может быть ближе к (лучшему описанию) проблемы, которую вы пытаетесь решить.
Кроме того, вам не нужно использовать чьи-либо реализации блокировки очереди или семафора: вы всегда можете написать свою собственную, но зачем делать дополнительную работу? (кроме, может быть, в образовательных целях.)