任意数量的节目的节目间通信

时间:2011-06-29 23:54:04

标签: c linux concurrency

我试图让一堆独立的程序智能地在它们之间分配共享资源。但是,我只能运行一个程序,或者可能有一大堆程序。

我的想法是mmap每个程序中的虚拟文件,但并发性正在扼杀我。互斥体显然是无效的,因为每个程序都可以锁定文件并完全忘记其他程序。但是,我编写信号量的尝试都失败了,因为信号量是文件的内部信号,我不能只依赖一次写入信号等等。

我已经看过很多关于命名管道的内容,但它似乎并不是我正在做的实际解决方案,因为我不知道有多少其他程序,如果有的话,也没有任何识别哪个程序参与我的资源共享操作的方法。

2 个答案:

答案 0 :(得分:2)

您可以使用UNIX域套接字(AF_UNIX) - 请参阅man 7 unix

当一个进程启动时,它会尝试bind()一个众所周知的路径。如果bind()成功,那么它知道它是第一个启动,并成为“资源分配器”。如果bind()失败并显示EADDRINUSE,则另一个进程已在运行,并且可以connect()代替它。

您还可以使用始终侦听路径的专用资源分配器进程,并仲裁资源请求。

答案 1 :(得分:1)

不完全清楚你要做的是什么,但我个人认为首先应该使用dbusmore detail)。在该框架内应该足够容易,以便您的流程/程序注册/宣布自己并枚举/发信号通知其他已注册的进程,和/或创建中央资源仲裁器并与之通信。在安装了gnome或KDE的任何系统上都可以随时使用。