【发布时间】:2013-12-27 05:24:14
【问题描述】:
一个进程(process-1)如下创建一个fd:
fd = open(FILE_PATH, O_CREAT, 0644);
有多个进程试图与 process-1 通信。
他们首先在由 process-1 创建的 fd 上获取排他锁。
flock(fd, LOCK_EX);
如果他们获得锁,他们可以与进程1通信。
无论如何我可以让进程 1 进入睡眠状态,并且只有当其他进程尝试聚集并成功时它才会被唤醒。
基本上我希望 process-1 在它创建的 fd 上阻塞(睡眠)。
根据我的要求,我试着用一种简单的方式来表达。
编辑: 以下有更多细节: https://stackoverflow.com/questions/20715569/block-on-general-file-descriptor
【问题讨论】:
-
也许你想要epoll?
-
谢谢,但我不确定 epoll 是否对一般/普通文件描述符有任何作用。我上面描述的 fd 不是套接字 fd。我会试试这个。
-
你真正想做什么?可能还有其他方法可以实现您的目标,而不是试图强迫它发挥作用。
-
你可以用一个条件变量或两个信号量来做到这一点。你为什么要强迫这个方案起作用?
-
首先考虑信号量。服务器与共享内存一起创建 2 个 sem。客户端打开信号量并共享内存。客户端等到他们获得 sem1 并可以写入。客户端发出信号(发布)sem2,以便服务器执行其操作。服务器发布到 sem1,以便下一个客户端可以继续并返回等待 sem2。服务器只是在 sem2 上阻塞,从而消除了整个无休止的旋转循环。