-1

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

这是我所做的:

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

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

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

有人告诉我使用消费者-生产者模式,但我不明白这将如何解决我的问题。

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

4

2 回答 2

0

假设某种 *nix 环境这是行不通的。只要管道读/写低于 PIPE_BUF 长度,就保证它们是原子的。让两个进程同时写入同一个 fifo 并没有什么意义。把它想象成写一个文件——为什么要穿插两个独立写入的内容?你会如何理解它?

你真的应该考虑使用多个fifo。即使这样,您也需要使用多线程或非阻塞 FIFO,select或者poll实现我认为您真正想要实现的目标。

于 2012-06-09T05:03:56.053 回答
0

Suggestion - you really don't need semaphores with named pipes, do you?

Just write whenever you want, and, under most circumstances, you'll block until there's something to read.

Here are a couple of short tutorial for using named pipes with shell scripts on Linux:

于 2012-06-09T04:51:20.303 回答