2013-04-10 73 views
0

我目前正在探索的boost ::線程/線程池和線程本地存儲基本達到一個數據報的副本到求職隊列中的線程池。副本列表,池,線程設置(1:N)的/每個線程本地存儲

當前設置使用1:1的設置,以鬆散耦合一個數據報從一個線程複製到另一個使用定製通知隊列。該隊列確實支持多個閱讀器線程,但每個閱讀器都會使用該消息。

我目前正在探索由thread_local_storage變異延長隊列獲得每個數據報復制到池中的每個線程的任務隊列。

但我在想,如果升壓可能已經支持這種操作的,儘管我coudln't發現任何東西。是否支持將單個副本提供給池中每個線程的本地存儲?

非常感謝!

回答

0

爲什麼你想要的數據的副本,每一個線程?我能想到的唯一原因是,因爲線程正在對其他線程看不到的數據進行更改。如果不做任何更改,只需將參考(aka指針)傳遞給每個線程的數據。如果必須進行更改,則還要傳遞對每個線程的引用,並讓線程複製數據。如果您需要發佈數據,當它不再使用時,請使用共享指針。

線程本地存儲主要是用於模擬舊式靜態變量。

+0

它是某種過濾器鏈......有N-> N-> N-> N ......許多不同的(依賴於運行時)實體對數據報進行迭代修改。在每個實體進行修改後,將它們推送到下一個實體。我希望不僅實現實體之間的1:1連接,而且實現1:n連接。使線程進行連接的問題在於工作隊列。人們不知道每個線程是否有數據共享以及何時從實際隊列中彈出()它們。 – Hhut 2013-04-10 10:47:45

+0

@Hhut然後使用共享指針指向你的數據報。將共享指針推送到必須處理該數據報的每個隊列。如果數據報在n個隊列上使用,則將共享指針推送到所有隊列。如果一個線程需要更改數據報,讓線程決定,讓線程複製數據。工作線程獲取數據報的唯一方法應該是從隊列中彈出共享數據。 – 2013-04-10 10:54:51