2010-01-19 114 views
0

我有一個對象列表, 爲每個對象我想運行一個完全獨立的線程(線程安全),就像....我會在while循環中從我的列表中選擇一個對象並運行一個線程然後爲下一個對象運行下一個線程...所有線程都應該同步,以便它們共享的資源(值/連接(關閉/打開))不應該改變.....線程同步

+1

有問題嗎? – 2010-01-19 06:59:31

回答

2

啓動線程對象不一定明智;您應該有少量工作線程從列表中選取項目(或更好,Queue<T>),同步對列表/隊列的訪問。線程安全隊列的一個例子可以在this thread中找到。

一旦你有一個工作項目,沒有神奇的子彈讓你編寫的其他代碼(處理它)線程安全。保持簡單的明智方法是不變性 - 無論是真正的不變性(項目不能更改)或簡單地不改變對象。當然,您可以在工作項目周圍實現鎖定,但這隻有在您的代碼使用相同的鎖定策略(這很難實施)時纔有所幫助。

0

我會選擇一個對象從我的名單 在while循環,並運行一個線程, 然後下一個對象運行的下一個 線程

如果我真的想每個對象的線程,這在while循環中新建立一個ObjectProcessingThread爲每個對象

class ObjectProcessingThread 
{ 
Thread processingThread = new Thread(); 
public TargetObject { get; set;} 

public Start() 
{ 
    //start the processing thread with threadEntryPoint as the work the thread will do 
} 

private threadEntryPoint 
{ 
    //do stuff with targetObject 
} 
} 

然後,設置它的TargetObject屬性,然後呼喚:我可能不會,我會創建這樣一個類g開始。

所有線程應該同步, 資源(值/連接 (關閉/打開)),由他們共享應該 不會改變.....

如果你不想值改變,不要改變它們。