public class MyConfigurationData
{
public double[] Data1 { get; set; }
public double[] Data2 { get; set; }
}
public class MyClass
{
private static object SyncObject = new object();
private static MyConfigurationData = null;
private static MyClass()
{
lock(SyncObject)
{
//Initialize Configuration Data
//This operation is bit slow as it needs to query the DB to retreive configuration data
}
}
public static MyMethodWhichNeedsConfigurationData()
{
lock(SyncObject)
{
//Multilple threads can call this method
//I lock only to an extent where I attempt to read the configuration data
}
}
}
私のアプリケーションでは、構成データを 1 回だけ作成し、それを数回使用する必要があります。つまり、一度書いて何度も読む。また、書き込み操作が完了するまで読み取りが行われないようにしたかったのです。つまり、MyConfigurationData を NULL として読み取りたくありません。
私が知っているのは、静的コンストラクターが AppDomain で 1 回だけ呼び出されることです。しかし、構成データを準備しているときに、スレッドがこのデータを読み取ろうとした場合、どうすれば同期を効果的に行うことができますか? 最後に、読み取り操作のパフォーマンスを改善したいと考えました。
ロックフリーの方法で目標を実装できますか?