2013-04-15 73 views
0

考慮與Open MP以下情形:用不同線程共享數據的最快方法?

我們有一個指針A指向內存中的一個非常大的緩衝區,我們有幾個線程,一個線程(可以稱之爲線#1)不斷更新的內容A而其他線程根據#1控制的信號處理存儲在A中的數據。

這是最快的方式,以確保(假設信號告訴其他線程合適的時間來複制A是不可分割的,因此沒有競爭條件存在):

  1. 線程處理數據將始終使用udpated數據(例如沒有一些數據被緩存在寄存器等中的風險)。

  2. 性能良好。

+0

是否只有一個緩衝區?線程#1能夠排隊幾個更小的*緩衝區嗎? –

回答

2

您可以嘗試讀寫鎖定。線程#1保持寫入鎖定,其他線程保持讀取鎖定。這樣所有其他線程可以並行讀取,只有讀寫是互斥的。

+0

這是否確保從其他線程的任何讀取將導致內存訪問,而不是嘗試在寄存器等中加載一些數據? – user0002128

+0

閱讀鎖並不關心你實際做什麼讀操作。讀取操作可能是從內存,磁盤,網絡等讀取,具體取決於您的代碼。讀寫鎖只能確保讀操作可以並行,讀/寫是可變的獨佔。 – TieDad

+0

嗯,問題是,有些情況下,線程2嘗試讀取內存中的某些數據(已更改),並且在編譯器優化後,編譯器認爲這些數據已經在寄存器中,因此沒有內存訪問,並且使用舊數據存儲在寄存器中,我試圖避免這種情況。 – user0002128