Почему именованные семафоры могут использоваться потоками в любых процессах, которые знают их имена? - PullRequest
0 голосов
/ 27 августа 2018

Из APUE

Семафоры POSIX доступны в двух вариантах: именованном и безымянном.Они отличаются тем, как они созданы и уничтожены, но в остальном работают одинаково. Неназванные семафоры существуют только в памяти и требуют, чтобы процессы имели доступ к памяти, чтобы иметь возможность использовать семафоры.Это означает, что они могут использоваться только потоками в одном и том же процессе или потоками в разных процессах, которые отображают одинаковый экстент памяти в свои адресные пространства. Именованные семафоры, напротив, , доступны по имени и могут использоваться потоками в любых процессах, которым известны их имена.

Безымянные семафоры "могут использоваться только потоками водин и тот же процесс или потоки в разных процессах, которые отображают один и тот же экстент памяти в свои адресные пространства ", потому что" безымянные семафоры существуют только в памяти ".

По какой причине именованные семафоры могут использоваться потоками в любых процессахкоторые знают их имена?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ты думаешь об этом задом наперед.Вопрос заключается в следующем: «Если мне нужно синхронизировать использование общего ресурса между несвязанными процессами, как мне это сделать?"И ответ таков: «Вы можете дать семафору имя, и тогда оно не ограничивается использованием в процессах, которые совместно используют память».

Почему это даже полезно?Что ж, варианты использования могут быть нечастыми - возможно, вы никогда не сталкивались с ними - но они, безусловно, существуют.Существует множество ресурсов, которые совместно используются несвязанными процессами: базы данных, файлы конфигурации, последовательные порты, очереди принтеров и многое другое.Вы можете быть посредником между общим использованием этих ресурсов с помощью файлов блокировки, но это неуклюже, и в итоге вы заново изобретаете колесо в каждом проекте.Семафоры, с другой стороны, просты в использовании и имеют четко определенную документированную семантику.

Однако большинство применений семафоров действительно находятся между связанными процессами, которые совместно используют память.И вы не хотели бы излишне оплачивать накладные расходы на поддержание имени в файловой системе.

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

0 голосов
/ 27 августа 2018

Со страницы руководства sem_overview :

В Linux именованные семафоры создаются в виртуальной файловой системе, обычно монтируемой в / dev / shm, с именами в формеsem.somename

Таким образом, они доступны для «потоков в любых процессах» аналогично обычным файлам.

Библиотека затем может отображать эти файлы в память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...