锁定抽象类中的静态变量或实例变量

本文关键字:变量 实例 静态 抽象类 锁定 | 更新日期: 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