2016-01-24 71 views
0

什麼是與所有線程的數據共享流的最佳方式? 如果我有一個線程與每個用戶連接交互,然後每個用戶輸入必須可用於所有線程。我們可以想像一個簡單的聊天,每個人都可以看到每個人的消息。pthread和有點「廣播流」

所以我雖然我可以使用某種「共享流」,我可以使用某種select()之間的這個流和用戶輸入套接字,寫在那裏,當我有一個輸入,並從那裏讀取時是可用的新東西。我雖然關於有一些共享套接字,但它不會這樣工作,因爲當第一個線程將從套接字讀取數據時,它不會再用於其他線程。

那麼它是最好的和慣用的方式來實現這一目標?

+1

對於IPC而言,使用'select()'對內部通信非常有用。在內部,具有關聯事件的共享隊列將是更好的方式,但也應該考慮寫入每個線程的單個隊列的多路複用器。你想要什麼? –

+0

你的意思是每個線程都檢查一個隊列並接收他以前沒有收到的最後一個數據,它應該跟蹤它已經獲得什麼和沒有收到什麼? – coredump

+1

是的,這是一個分類「生產者 - 消費者情景」,只需搜索網絡。 –

回答

0

我認爲你可能會把這裏的工程設計得太過分了.. 你在找什麼是SMP like thisthis某種,而不是流。 「流」的概念可以由一個不同的流程來處理(一個管理者流程,如果你願意的話),它可以處理流入的信息流。在你描述的聊天場景中,這不是壞事,因爲每個線程都可以在SMP上添加任何接收到的輸入流。