Межпрограммное общение для произвольного числа программ - PullRequest
1 голос
/ 30 июня 2011

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

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

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Вы могли бы использовать сокет домена UNIX (AF_UNIX) - см. man 7 unix.

Когда процесс запускается, он пытается bind() известныйдорожка.Если bind() успешен, то он знает, что запускается первым, и становится «распределителем ресурсов».Если bind() завершается неудачно с EADDRINUSE, тогда уже выполняется другой процесс, и он может вместо него connect().

Вы также можете использовать выделенный процесс выделения ресурсов, который всегда прослушивает путь,арбитраж запросов ресурсов.

1 голос
/ 30 июня 2011

Не совсем понятно, что вы пытаетесь сделать, но лично моей первой мыслью было бы использовать dbus ( более подробно ). В этих рамках должно быть достаточно просто, чтобы ваши процессы / программы могли регистрировать / объявлять себя и перечислять / сигнализировать о других зарегистрированных процессах и / или создавать центральный арбитр ресурсов и взаимодействовать с ним. Доступно в любой системе с установленным gnome или KDE.

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