【问题标题】:Cause a Linux poll event on a shared memory file在共享内存文件上引发 Linux 轮询事件
【发布时间】:2012-07-13 12:15:57
【问题描述】:

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

【问题讨论】:

    标签: linux


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      一个简单的例子,使用共享内存(在这个例子中它是在 System V 中,但你也可以将它与 POSIX 一起使用)和 POSIX 信号量在链接中, How can 2 processes talk to each other without pipe()?

      【讨论】:

        猜你喜欢
        • 2021-12-01
        • 2019-05-08
        • 2015-10-04
        • 2011-02-18
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        • 2020-04-25
        • 2011-03-18
        相关资源
        最近更新 更多