2012-12-17 170 views
0

我有下面的应用程序,线程1从文件读取并放入FIFO,然后线程2读取FIFO并处理数据并发送到网络套接字,线程3正在从网络套接字接收数据,然后保存到file2的结果,但有时收到的数据必须由thread2重新处理,所以问题是什么是最好的事情?我是否需要再次发送到FIFO?或在线程3和线程2之间有另一个fifo?或两者都不?带FIFO的线程

File1中 - >线程1 - > FIFO - >螺纹2 - >网络套接字

网络套接字 - >线3 - > file2的

顺便说一句,上面的是一个示例我有什么,实际的程序将有许多线程从FIFO中读取并发送到网络,不确定以这种方式使用FIFO会造成延迟或将成为瓶颈。

感谢您的帮助。

+0

在什么情况下数据需要重新处理?首先是线程2可以检测到的东西吗? – paddy

+0

线程2有无限循环,它嘎吱嘎吱地响着FIFO中的任何东西,所以没有线程2没有检测到任何东西 – user1832809

+0

我害怕的是有更多从FIFO读取的数据,不确定是否会一个瓶颈 – user1832809

回答

0

嗯,

有什么特别的原因选择系统调用,将监视文件和套接字描述符的数组没有被使用?这可以简化代码,如here所示。

您使用的并行线程或类似升压线程库...

难道这些线程确实是不同的过程......或者这是你使用调用pthread_cond_wait所有的一个程序()?

+0

我在一个程序中使用pthread,并且我没有使用pthread_cond_wait() – user1832809

+0

通常,您使用互斥锁来保护condition_variable。这些是多重过程吗?就像我问的那样?...如果只是一个进程,然后没有_mmap_文件...使用pthread_mutex_init() – ArrowInTree

+0

我没有使用锁的原因是因为我发送少于pipe_buff,所以同步将完成由内核,并且这不是一个进程 – user1832809