2014-11-16 38 views
-1

如果一個類有一個數組,它並不重要。現在一個線程正在向所述數組添加數據,而另一個線程需要處理已經在其中的數據。由於我對多線程的知識有限,它如何工作?我能想到的第一個問題是如果一個項目被添加而另一個線程正在處理仍然存在的項目。起初我認爲這不會是一個問題,處理器線程會在下一次處理時得到它,但是後來我意識到,處理器線程刪除已經處理的項目時,添加線程不會收到此更改,可能(? )肆虐。有沒有什麼好的方法來實現這種行爲?C中字段的跨線程訪問#

+0

這可能與內容的類型有關,而且您不指定如何實現「添加到」和「從陣列中移除」。最後,你不應該在這裏使用數組。 –

回答

0

你所描述的基本上是Reader Writers Problem。如果你想照顧多線程,你要麼需要一個併發的集合,要麼使用一個鎖。鎖的最簡單的執行僅被鎖定的對象

private Object myLock = new Object(); 

public MyClass ReadFromSharedArray() 
{ 
lock(myLock) 
{ 
//do whatever here 
} 

} 

public void WriteToSharedArray(MyClass data) 
{ 
lock(myLock) 
{ 
//Do whatever here 
} 

} 

有更好的鎖,如ReadWriterSlim鎖,但這種基本的實現應該是一個很好的起點。

另外你提到從陣列中添加/刪除,我假設你的意思是列表(或更好的隊列) - 有一個ConcurrentQueue這可能是一個很好的替代品。

+0

實際上,我的確在使用隊列。我只是簡化爲數組。我需要對ConcurrentQueue做些什麼特殊的事情,還是應該像使用多線程一樣使用它? – AlphaModder

+0

如果你正在做的是讀取/寫入併發隊列將會很好。 – Haedrian