【问题标题】:On MacOSX, in C++, how to do interprocess communication over shared memory without spin lock?在 MacOSX 上,在 C++ 中,如何在没有自旋锁的情况下通过共享内存进行进程间通信?
【发布时间】:2011-01-24 06:17:54
【问题描述】:

我有两个进程:

Producer
and
Consumer

它们有一个共同映射的共享内存区域

Memory

现在,Producer 将内容写入内存。消费者从内存中读取内容。

I would prefer Consumer not to spin wait with Memory is empty.
I would prefer Producer not to spin wait when Memory is full.

我如何做到这一点?

【问题讨论】:

    标签: c++ consumer producer


    【解决方案1】:

    这让人想起Dining Philosophers Problem。如果您的平台支持它,您可以跨多个进程使用condition variablesshared。使用此类共享条件变量,您的Producer 可以在数据可用时向您的Consumer 发出信号以读取Memory,反之亦然,当Memory 为空时。记得检查spurious wakeup

    您需要检查 MacOSX pthread 实现是否支持跨进程共享的条件变量。请参阅my answer to your mutex related question 以确定如何操作。答案也适用于条件变量。

    【讨论】:

      【解决方案2】:

      如何使用互斥锁?由于互斥锁会一直休眠直到资源可用,所以您不会遇到自旋等待问题。

      【讨论】:

        猜你喜欢
        • 2013-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        相关资源
        最近更新 更多