回复:共享内存和信号量
Posted
技术标签:
【中文标题】回复:共享内存和信号量【英文标题】:Re: Shared Memory and Semaphores 【发布时间】:2010-10-26 08:25:23 【问题描述】:IPC 机制是否使用共享内存和信号量来同步单工(如管道)或双工(如消息队列)?
【问题讨论】:
【参考方案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 会注意到信号量可用,可能类似于我之前提到的。
我写出所有这些的原因是我可以说,两者兼而有之。它就像一个消息队列,您可以让线程等待资源(由信号量控制的共享内存),当它们获得资源时触发一些操作,甚至是实际的系统消息。或者你可以忙着等待它完成,这就像管道一样。
【讨论】:
以上是关于回复:共享内存和信号量的主要内容,如果未能解决你的问题,请参考以下文章