锁定抽象类中的静态变量或实例变量
本文关键字:变量 实例 静态 抽象类 锁定 | 更新日期: 2023-09-27 18:26:29
public abstract BaseClass
{
private static readonly object _filelockStatic = new object();
private readonly object _filelock = new object();
public void StaticLock()
{
lock(_filelockStatic)
{
//Edit a common text file (common to all children)
}
}
public void InstanceLock()
{
lock(_filelock)
{
//Edit a common text file (common to all children)
}
}
}
如果我有一个抽象类,其方法可以编辑文本文件(所有子类实例通用的一个文本文件(,为了使它线程安全,我是否必须锁定静态成员或无关紧要?
换句话说,在上面的示例代码中,InstanceLock()
和 StaticLock()
在线程安全性方面是否存在差异?
这是有区别的,因为InstanceLock
将允许派生类的两个实例同时编辑文件。这是因为锁不在实例之间共享。首选静态锁,因为只要您位于同一应用程序域中,它就会阻止任何派生类从不同的线程进入lock(_filelockStatic)
区域
var o1 = new DerivedClass();
var o2 = new DerivedClass();
// o1._filelock != o2._filelock
// o1._filelockStatic == o2._filelockStatic