Нет, не с классическими семафорами. Если вам нужно поведение, подобное очереди, вы создаете очередь (с семафором или, может быть, несколькими из них) для защиты общей структуры данных в очереди.
Реальность такова, что хотя теоретически все, что вам нужно для синхронизации, - это семафоры, вы редко (никогда?) Пишете значительный объем реального кода, который просто использует голые семафоры напрямую. Большую часть времени вы создаете высокоуровневые конструкции с (например) семафором для защиты этих важных данных в этой конструкции.