我在我的C#應用程序中有一個靜態的共享資源(文本處理器類)集合,它響應關鍵字。每個處理器都是有狀態的,所以不能在多線程環境中工作。我正在尋找一種組織這些的好方法,以便我可以對其進行線程安全訪問。同步C#中的共享資源集合
例如,我可以嵌入一個同步對象中的每個處理器
public abstract class TextProcessor
{
protected internal readonly object sync = new object();
public abstract void Run(string text);
}
public class DocumentProcessor
{
private static Dictionary<string,TextProcessor> s_procMap = ...;
public void Run(string [] words1, string[] words2)
{
ThreadPool.QueueUserWorkItem(Process, words1);
ThreadPool.QueueUserWorkItem(Process, words2);
}
private void Process(object arg)
{
foreach(var word in words)
{
var proc = s_processor[word];
lock(proc.sync)
{
proc.Run(word);
}
}
}
假設我不能重寫我的處理器是無狀態(這是一個選項,但會是最後的手段,由於體積重構),有沒有更好的方式來表達這一點?
「TextProcessor」是所有處理器的超類嗎? –
不知道爲什麼你需要在這裏多線程?似乎所有的同步問題可能會導致所有性能優勢的喪失,並顯着增加代碼的複雜性。 –
@SergeyRybalkin文本處理造成的時間超過了所需的啓動時間,所以我熱衷於調查場景以減輕這種情況。分析顯示我的輸入分析是一個瓶頸,所以我在這裏試圖精簡它。 –