Рассмотрите возможность использования семафоров POSIX вместо семафоров SYSV. Дизайн POSIX проще и чище; например, семафоры POSIX создаются с заданными начальными значениями.
Семафоры SYSV имеют, однако, некоторые возможности, которые не имеют семафоров POSIX, такие как отмененные операции и работа с многоэлементным семафором наборы. Если вы должны использовать аромат SYSV, то ...
Я полагаю, вы предполагаете использовать известный ключ для набора семафоров, чтобы у вас не было контроля над временем, в котором процессы, отличные от тех, которые предназначены для создания набор семафоров получает доступ к набору. В худшем случае у вас может быть несколько процессов, которые пытаются получить семафор, установленный с помощью одного и того же ключа, и с IPC_CREAT | IPC_EXCL
, с тем, который успешно отвечает за инициализацию, а те, которые получают EEXIST
, снова пытающиеся без этих флагов. Действительно, это порождает беспорядок.
Если у вас есть ситуация, когда известный набор ключей семафора используется несвязанными процессами, то соответствующий набор семафоров является системным ресурсом, не относящимся ни к одному из процессов в отдельности. В этом случае у вас должны быть программы, предназначенные для инициализации и управления им. Они должны быть подключены к вашей системе инициализации.
Также можно использовать какую-либо другую форму взаимного исключения для защиты инициализации набора семафоров. Например, вы можете использовать файл блокировки. Вы даже можете использовать семафор POSIX для этой ограниченной цели.
Процесс, который создает семафор, должен завершить инициализацию до того, как будут созданы какие-либо процессы, которые используют семафор. Типичным способом обработки этого является создание/инициализация семафора, а затем fork/exec других процессов. – user3386109
Процессы, получающие доступ к этой группе семафоров, могут начинаться с crond, из CLI и могут быть инициализированы с веб-сервера. Он не разветвляется ни одним процессом. Поэтому мне нужно защитить группу семафоров, но для этого мне нужно ... семафор где-то? – drvtiny
Затем, как часть последовательности запуска, вам нужно запустить программу, которая создает и инициализирует группу семафоров. Он должен закончить, прежде чем запускать программы, которые используют семафоры. – user3386109