Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带fifo的线程_C_Multithreading_Ipc_Fifo - Fatal编程技术网

C 带fifo的线程

C 带fifo的线程,c,multithreading,ipc,fifo,C,Multithreading,Ipc,Fifo,我有一个下面的应用程序,线程1读取一个文件并放入FIFO,然后线程2读取该FIFO并处理数据并发送到网络套接字,线程3从网络套接字接收数据,然后将结果保存到文件2,但有时接收到的数据必须由线程2重新处理,所以问题是最好的做法是什么?我需要再次发送到FIFO吗?或者在线程3和线程2之间有另一个fifo?或者两者都没有 文件1-->线程1-->FIFO-->线程2-->网络套接字 网络套接字-->线程3-->文件2 顺便说一句,上面是我的一个例子,实际的程序将有许多线程从FIFO读取并发送到网络,不

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

文件1-->线程1-->FIFO-->线程2-->网络套接字

网络套接字-->线程3-->文件2

顺便说一句,上面是我的一个例子,实际的程序将有许多线程从FIFO读取并发送到网络,不确定这样使用FIFO是否会导致延迟或成为瓶颈

谢谢你的帮助。

为什么不使用select system call来监视文件和套接字描述符数组,有什么特殊原因吗?这可以简化代码,如图所示

您使用的是pthreads还是类似于boost线程库的东西


这些线程是否确实是不同的进程。。。或者这是一个使用pthread_cond_wait()的程序吗?

在什么条件下需要重新处理数据?它是线程2首先可以检测到的东西吗?线程2有无限循环,它处理fifo中的任何东西,所以没有线程2检测不到任何东西。我担心的是,有更多的线程从fifo读取数据,不确定这是否会成为瓶颈,但“重新处理”在这种情况下意味着什么?您的意思是“再次将数据发送到线程3”吗。在什么情况下需要重新处理?我使用pthread,一个程序中的所有程序,我不使用pthread_cond_wait()。通常,您使用互斥锁来保护条件变量。这些是多个过程吗?就像我问的那样?…如果只是一个进程,那么没有mmap文件。。。使用pthread_mutex_init()我不使用lock的原因是因为我发送的少于pipe_buff,所以同步将由内核完成,而不是这是一个进程pipe_buf由mkdev或mknod创建的实际FIFO?你应该根据>打开FIFO进行读取,这解决了select的问题。我使用o_nonblock选项打开FIFO,实际上我在这部分或同步方面没有问题,即使有问题,我们忽略它。