2012-12-17 169 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