【发布时间】:2012-07-13 12:15:57
【问题描述】:
两个 Linux 进程打开并映射同一个 /dev/shm/ 共享内存文件并将其用作公共内存。问题:一个进程“唤醒”另一个进程以通知它应该在内存中查找的最简单和最好的方法是什么? 例如,一个进程能否为另一个进程的文件描述符引发 poll() 事件? 该解决方案不需要是可移植的,但我希望它简单。
【问题讨论】:
标签: linux
两个 Linux 进程打开并映射同一个 /dev/shm/ 共享内存文件并将其用作公共内存。问题:一个进程“唤醒”另一个进程以通知它应该在内存中查找的最简单和最好的方法是什么? 例如,一个进程能否为另一个进程的文件描述符引发 poll() 事件? 该解决方案不需要是可移植的,但我希望它简单。
【问题讨论】:
标签: linux
这就是 POSIX 有条件变量的原因。
在共享内存区域中定义一个共享的 POSIX 条件变量及其关联的互斥体。
然后让一个线程在条件变量上等待,当另一个线程希望另一个线程在内存中查找时,它会发出条件变量事件的信号。
网络上有很多关于条件变量的资料。 这是一个相当不错的短篇:https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables
【讨论】:
您也可以考虑使用信号量(POSIX 命名信号量)来解决这个问题。
一个简单的例子,使用共享内存(在这个例子中它是在 System V 中,但你也可以将它与 POSIX 一起使用)和 POSIX 信号量在链接中, How can 2 processes talk to each other without pipe()?
【讨论】: