【问题标题】:Re: Shared Memory and Semaphores回复:共享内存和信号量
【发布时间】:2010-10-26 08:25:23
【问题描述】:

IPC 机制是否使用共享内存和信号量来同步单工(如管道)或双工(如消息队列)?

【问题讨论】:

    标签: ipc shared-memory semaphore duplex


    【解决方案1】:

    如果我对你的问题的理解是正确的,那就是双工。

    使用共享内存,两个进程可以双向通信,而不仅仅是一个作为读取器,一个作为写入器。管道只允许读取或写入,但您可以通过使用两个管道来克服这个问题(尽管消息队列是更好的选择)。

    【讨论】:

      【解决方案2】:

      信号量是这样工作的... proc a:“资源可用吗?”信号量 = -2 是的。信号量++ proc b: "是资源..." 信号量 = -1 是的。信号量++ proc c: "is the resource..." semaphore = 0 No. (什么都没有发生)

      此时,proc c 可以排队(取决于您的 api,这可能是一个繁忙的循环,也可能是一个回调,或者您可能只是生成一个等待线程并编写自己的回调)

      proc a: "im done" 信号量--;

      proc c 会注意到信号量可用,可能类似于我之前提到的。

      我写出所有这些的原因是我可以说,两者兼而有之。它就像一个消息队列,您可以让线程等待资源(由信号量控制的共享内存),当它们获得资源时触发一些操作,甚至是实际的系统消息。或者你可以忙着等待它完成,这就像管道一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2020-04-29
        相关资源
        最近更新 更多