IPC 机制是使用共享内存和信号量来同步单工(如管道)还是双工(如消息队列)?
问问题
885 次
2 回答
0
信号量是这样工作的...... proc a:“资源可用吗?” 信号量 = -2 是的。semaphore++ proc b: "Is the resource..." semaphore = -1 Yes. semaphore++ proc c: "is the resource..." semaphore = 0 No. (什么都没有发生)
此时,proc c 可以排队(取决于您的 api,这可能是一个繁忙的循环,也可能是一个回调,或者您可能只是产生一个等待线程并编写自己的回调)
proc a:“我完成了”信号量--;
proc c 会注意到信号量可用,这可能与我之前提到的类似。
我写出所有这些的原因是我可以说,两者兼而有之。它就像一个消息队列,您可以让线程等待资源(由信号量控制的共享内存),当它们获得资源时触发一些操作,甚至是实际的系统消息。或者你可以忙着等待它完成,这就像管道一样。
于 2009-05-14T22:23:08.297 回答
0
如果我对您的问题的理解是正确的,那就是双工。
使用共享内存,两个进程可以双向通信,而不仅仅是一个作为读取器,一个作为写入器。管道只允许读取或写入,但您可以通过使用两个管道来克服这个问题(尽管消息队列是更好的选择)。
于 2009-05-14T22:29:34.960 回答