如果一個類有一個數組,它並不重要。現在一個線程正在向所述數組添加數據,而另一個線程需要處理已經在其中的數據。由於我對多線程的知識有限,它如何工作?我能想到的第一個問題是如果一個項目被添加而另一個線程正在處理仍然存在的項目。起初我認爲這不會是一個問題,處理器線程會在下一次處理時得到它,但是後來我意識到,處理器線程刪除已經處理的項目時,添加線程不會收到此更改,可能(? )肆虐。有沒有什麼好的方法來實現這種行爲?C中字段的跨線程訪問#
-1
A
回答
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
相關問題
- 1. c#顯示線程無效的跨線程訪問問題
- 2. 瞭解跨線程控件訪問C#
- 3. C#調用動作跨線程訪問
- 4. C#靜態變量跨線程訪問
- 5. Cocoa WebView跨線程訪問
- 6. UnauthorizedAccessException:Silverlight應用程序(XAML/C#)中的無效跨線程訪問
- 7. 無效的跨線程訪問問題
- 8. 從線程以外的線程訪問跨線程操作
- 9. 跨線程的Segfault訪問類
- 10. WP7無效的跨線程訪問 - ScheduledTaskAgent
- 11. WP7 BarcodeManager - 無效的跨線程訪問
- 12. ReactiveCollection和無效的跨線程訪問
- 13. BackgroundWOrker無效的跨線程訪問
- 14. 無效的跨線程訪問WP7
- 15. 無效的跨線程訪問Windows Azure
- 16. c#線程訪問問題
- 17. LightSwitch的C#MessageBoxResult錯誤(UnautherizedAccessException:無效的跨線程訪問)
- 18. C#Windows Phone芒果 - 無效的跨線程訪問?解析XML
- 19. 多線程訪問C#字典
- 20. 無效跨線程訪問Windows Phone上
- 21. BindingSource,BindingList,DataGridView和跨線程訪問
- 22. 跨線程訪問變量和方法
- 23. 跨線程共享內存訪問
- 24. WPF跨線程對象訪問
- 25. WP 7多線程,無效的跨線程訪問
- 26. 跨線程,訪問線程不是它創建的
- 27. 的Windows Phone 8線程無效跨線程訪問
- 28. c#線程訪問其他線程
- 29. 多線程訪問C#中的WPF GUI#
- 30. Silverlight應用程序中的無效跨線程訪問
這可能與內容的類型有關,而且您不指定如何實現「添加到」和「從陣列中移除」。最後,你不應該在這裏使用數組。 –