私の 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 );
}
}
}
プロセッサをステートレスに書き換えることができないと仮定すると (これはオプションですが、リファクタリングの量が多いため最後の手段になります)、これを表現するより良い方法はありますか?