13

两个 Linux 进程打开并映射同一个 /dev/shm/ 共享内存文件并将其用作公共内存。问题:一个进程“唤醒”另一个进程以通知它应该在内存中查找的最简单和最好的方法是什么?例如,一个进程能否为另一个进程的文件描述符引发 poll() 事件?该解决方案不需要是可移植的,但我希望它简单。

4

2 回答 2

4

这就是 POSIX 有条件变量的原因。

在共享内存区域中定义一个共享的 POSIX 条件变量及其关联的互斥锁。

然后让一个线程等待条件变量,当另一个线程希望另一个线程查看内存时,另一个线程发出条件变量事件的信号。

网络上有很多关于条件变量的资料。这是一个很好的简短的:https ://computing.llnl.gov/tutorials/pthreads/#ConditionVariables

于 2012-07-13T15:12:12.017 回答
2

您也可以考虑使用信号量(POSIX 命名信号量)来解决这个问题。

一个简单的示例,使用共享内存(在示例中它在 System V 中,但您也可以将它与 POSIX 一起使用)和 POSIX 信号量在链接中, 两个进程如何在没有 pipe() 的情况下相互通信?

于 2012-07-14T02:58:24.630 回答