0

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

4

2 回答 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 回答