Где нам действительно нужен набор System v Semaphores?

Каждый раз, когда я читаю описание semget: The semget() system call returns the semaphore set identifier associated with the argument key.Интересно, где нам действительно нужен набор семафоров System V?

Я всегда даю nsems параметр как 1 потому что в большинстве случаев мне требуется один семафор. Даже если мне не нужен двоичный семафор, зачем мне создавать набор из 5-6 семафоров (скажем).

и что, если процесс создает набор из 6 семафоров, связанных с одним ключом, а другой пытается выполнить полугетку с тем же ключом, запрашивая только 3 семафора. Также не все эти 6 семафоров 6 отдельных двоичных семафоров. Я хочу пить и ищу ответ на этот вопрос в течение 2 месяцев (не постоянно, конечно).

Мне жаль, если этот вопрос кажется самым глупым, но если я не получу пример реального использования набора семафоров, это сомнение останется в моей памяти. Я пытался найти пример кода C, где кто-то использует набор семафоров, но я не смог его найти.

Я был бы очень благодарен вам, ребята, если бы вы могли помочь мне в этом. Спасибо за тонну заранее.

3 ответа

Я работаю над СУБД, которая использует один семафор для каждого из набора взаимодействующих процессов, которые работают с одними и теми же данными, взаимодействуя через общую память. Необходимость распределять их по одному было бы неприятностью; очень удобно иметь семафор, в котором 20 (или что-то еще) семафоров.

Наиболее типичная ситуация, которую я знаю для семафора, - это когда у вас есть очередь данных, обрабатываемая одним или несколькими потоками обработки. Каждый поток будет уменьшать семафор для каждой записи, удаляемой из очереди, и по мере добавления новых данных в очередь семафор увеличивается. Тогда все, что вам нужно сделать, это ждать семафора, а не постоянно запрашивать обновление.

Я использовал набор семафоров в задании по курсу «Операционные системы» в моем университете.

Задача состояла в том, чтобы создать сервер, который порождает клиентов. Клиенты могли отправлять запросы и получать ответы от сервера. Только один клиент в каждый момент времени мог отправить запрос на сервер.

Поэтому я использовал три семафора:

  • 1 в качестве мьютекса (инициализированного равным единице), используемого исключительно между клиентами
  • 1 для запросов между клиентом и сервером.
  • 1 для ответов, между сервером и клиентом
Другие вопросы по тегам