我试图让一堆独立的程序智能地在它们之间分配共享资源。但是,我只能运行一个程序,或者可能有一大堆程序。
我的想法是mmap
每个程序中的虚拟文件,但并发性正在扼杀我。互斥体显然是无效的,因为每个程序都可以锁定文件并完全忘记其他程序。但是,我编写信号量的尝试都失败了,因为信号量是文件的内部信号,我不能只依赖一次写入信号等等。
我已经看过很多关于命名管道的内容,但它似乎并不是我正在做的实际解决方案,因为我不知道有多少其他程序,如果有的话,也没有任何识别哪个程序参与我的资源共享操作的方法。
答案 0 :(得分:2)
您可以使用UNIX域套接字(AF_UNIX
) - 请参阅man 7 unix
。
当一个进程启动时,它会尝试bind()
一个众所周知的路径。如果bind()
成功,那么它知道它是第一个启动,并成为“资源分配器”。如果bind()
失败并显示EADDRINUSE
,则另一个进程已在运行,并且可以connect()
代替它。
您还可以使用始终侦听路径的专用资源分配器进程,并仲裁资源请求。
答案 1 :(得分:1)
不完全清楚你要做的是什么,但我个人认为首先应该使用dbus(more detail)。在该框架内应该足够容易,以便您的流程/程序注册/宣布自己并枚举/发信号通知其他已注册的进程,和/或创建中央资源仲裁器并与之通信。在安装了gnome或KDE的任何系统上都可以随时使用。