我有以下代码:
internal class ModuleLogic
{
#region [Private Variables]
private static ReaderWriterLockSlim _moduleListLock = new ReaderWriterLockSlim();
private static List<Module> _moduleList;
#endregion
public static void RefreshModuleData()
{
_moduleListLock.EnterWriteLock();
try
{
ModuleData.RefreshModuleData(_moduleList);
}
finally
{
_moduleListLock.ExitWriteLock();
}
}
}
我是否更正,每次访问RefreshModuleData()方法时,每次访问都会共享两个私有静态变量?
答案 0 :(得分:1)
我更正了每次实例化这个类时,两个私有静态变量只实例化一次(第一次)并用于每个实例
是的,因为它们是静态字段,所以它们只会被实例化。当然,如果你没有在代码中的任何地方覆盖它们。
答案 1 :(得分:1)
静态字段确实在所有调用之间共享。为避免混淆,您还可以将锁定字段设置为“只读”。列表字段可能不是只读的,但请注意,曾更改列表中的内容(一旦在字段中可用)将是一个坏主意,因为它可能正在使用多线程。
注意:由于您当前执行更新列表,因此您当前的代码可能不是线程安全的(如果任何调用者查看锁定区域之外的列表 - “读”锁会做。)
作为次要注释,“锁定”会减少开销,并且具有相同的调用模式(因为您总是采用写锁定)。
答案 2 :(得分:0)
您的静态属性_moduleListLock
仅在声明它的位置初始化一次。然而,每个Application Domain都有自己的静态变量副本。
答案 3 :(得分:0)
第一次引用ModuleLogic类的任何内容时,其静态构造函数(已定义)和所有静态字段都按照从上到下的顺序进行初始化。作为“静态”,整个应用程序中只有一个引用。