使用命名管道和信号量的两个进程之间的通信

时间:2012-06-09 04:47:18

标签: c mutex pipe semaphore

我正在尝试在两个进程(如聊天室)之间进行通信。每个进程都有自己的终端窗口打开。我正在使用命名管道进行通信。

这就是我的所作所为:

我有一个名为“MYFILE”的FIFO_FILE。进程A将新行写入MYFILE,进程B从MYFILE读取,并将该行输出到进程B的终端显示。但是,如果进程B想要向MYFILE写一个新行,(根据我对信号量的理解),进程A将被阻止读取/写入MYFILE,直到进程B完成写入。

我想要实现的目标是:当两个进程想要写入时,当其他进程在写入文件之前不应该阻止进程。

我能想到的唯一方法是拥有两个FIFO_FILE。但是如何实现这个实现呢? 或者还有其他方法可以实现吗?

我被告知使用消费者 - 生产者模式,但我不知道这将如何解决我的问题。

任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:0)

建议 - 您真的不需要使用命名管道的信号量,对吗?

随时随地写,在大多数情况下,你会阻止,直到有东西要读。

以下是在Linux上使用带有shell脚本的命名管道的一些简短教程:

答案 1 :(得分:0)

假设有某种* nix环境,这将无效。管道读/写保证是原子的,只要它们在PIPE_BUF长度下即可。让两个进程同时写入同一个fifo并没有多大意义。把它想象成写入文件 - 为什么你想要两个独立写入的内容穿插?你怎么理解它?

你真的应该考虑使用多个fifos。即便如此,您还是需要使用多线程或非阻塞FIFO以及selectpoll来实现我认为您真正希望实现的目标。