2012-05-10 79 views
0

我需要写入多个进程写入FIFO,我想知道如何在它们之间进行同步,是否需要写入一些锁,如果是的话那么会因为进程缓慢等待另一方解锁? 请让我知道什么是实现进程间通信的其他最佳方式?多进程读/写fifo

+0

您需要更详细地描述您的方案。一个特别的问题是“每封邮件有多大”。如果它小于FIFO缓冲区的大小(并且用'write()'的单个调用写入),则每个消息都是原子的,而不管有多少个进程正在使用FIFO。您还需要描述一下写作过程是否会全部打开FIFO并在完成之前保持打开状态,或者他们是否打开并关闭每条消息。数据是只传到“服务器”,还是服务器要回复?如果服务器将回复,它将如何回复? –

+0

使用套接字可能会更好;每个套接字将是客户端和服务器之间的双向连接。我假设你有一个中央服务器进程,而不是一些随机交互的程序集合,但是你的额外描述也应该解释“进程几何”。 –

+0

我怎样才能知道FIFO缓冲区的大小,最多500K的消息,这个大小是可配置的。所以我想到的是有一个FIFO,多个进程将写入它,一个进程将读取它并将其内容发送到网络。 –

回答

2
"do I need to write some lock" 

好吧,可能是的。如果你正在使用共享内存(pthreads,openmp),那么你需要有一些读写锁来防止竞争条件,数据无效等。如果你正在使用分布式内存,那么你会想要考虑一些减少操作以将所有数据集中到一个地方。

"if yes then would that be slow as a process has to wait for the other to free the lock?" 

这取决于你,程序员。编写速度慢,效率低下的程序很容易,但需要一些时间来提高程序执行速度,速度等等。我可能还会补充说,如果您认为性能瓶颈应该不是实际发生的地方。使用调试器和性能分析器成为最好的朋友是个好主意。

这里有一些资源可以帮助您入门,我建议您做研究,编写代码并提出具体问题以获得更好的帮助。

https://computing.llnl.gov/tutorials/pthreads/

https://computing.llnl.gov/tutorials/openMP/

https://computing.llnl.gov/tutorials/mpi/

还检查了 '相关' 的问题,以正确的其它一些重要的资源。