2011-04-28 87 views
0

我有两个进程,A和B. B是一个执行某些功能的进程。过程A是控制B的过程。即过程A通过向其提供数据(控制和功能)来指示过程B.进程间通信Unix C

我有一个B专用于IPC的线程,该线程所做的全部工作就是从进程A获取指令,而其他正在运行的线程则对已有数据执行任何操作。

我想到了使用shmat的管道和共享内存。但是我不满意,我想要类似的东西,只要进程A向B写入消息,只有B的ipc线程必须唤醒。任何想法如何实现这个目标?

+2

那么......从管道读取是阻塞的,所以......它只在有可用数据时唤醒线程。或者我误解了你的问题? – 2011-04-28 16:58:21

+0

但它的问题是它也使写入过程(A)等待,直到读取过程打开读取管道。 – 2011-04-28 17:05:41

+0

管道缓冲区满后,这是真的。但是,如果您不想丢失任何数据,则需要等待读者准备就绪。如果您不关心丢失数据,请使管道不堵塞。你总是可以在管道中间放置另一个进程来充当无限的缓冲区。 – 2011-04-28 17:10:14

回答

0

我找到了一个解决方案。我让其中一个线程打开管道的一端进行读取,进行实际读取并关闭它。这在一个无限的while循环中继续!

想要写入它的进程只有在需要写入并关闭它时才会打开它,并最终结束。

Infact此设置避免了同步问题。但是我不知道演出的中间环节会带来什么样的后果!

2

具体的排序取决于你需要什么样的灵活性和谁在使用什么管道,但是这应该工作:让管道B上的IPC线程选择可读性。当进程A写入管道时,进程B的IPC线程将被唤醒。