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
}
}
}
在我的应用程序中,我只需要创建一次配置数据并多次使用它。换句话说,我写一次,读很多次。而且,我想确保在写操作完成之前不会发生读取。换句话说,我不想将 MyConfigurationData 读取为 NULL。
我所知道的是静态构造函数在 AppDomain 中只调用一次。但是,当我准备配置数据时,如果任何线程试图读取这些数据,我将如何确保同步有效?最后,我想提高我的读取操作的性能。
我可以以无锁的方式实现我的目标吗?