我的 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 );
}
}
}
假设我不能将我的处理器重写为无状态(这是一种选择,但由于重构量很大,这是最后的手段),有没有更好的方法来表达这一点?