可以说我已经声明了一个这样的类:
public class PersistableObject<TObject> where TObject : class, new()
{
private readonly object objectLocker = new object();
private TObject persistableObject;
public TObject Object
{
get
{
lock (this.objectLocker)
{
return this.persistableObject;
}
}
set
{
lock (this.objectLocker)
{
this.persistableObject = value;
}
}
}
public bool Persist()
{
lock (this.objectLocker)
{
// Do Persist Object in file
}
}
public bool Retrieve()
{
lock (this.objectLocker)
{
// Do Retrieve Object from file
}
}
}
该类负责存储任何类型的变量,将其保存到文件中并从文件中检索它。
如您所见,我使用相同的锁(一个对象)来锁定 4 个操作:
- 获取实际对象
- 设置实际对象
- 将对象持久化到文件中
- 从文件中检索对象
从并发的角度来看,这是正确的方法吗?考虑到这个类被不同的线程使用,我是否完全处于安全区?
更新 :
对我来说最重要的是,在任何给定时间只有一个线程应该有权访问该对象(无论它想要获取、设置、检索还是持久化它)。考虑到这一点,这是正确的方法吗?会发生任何僵局或其他令人讨厌的事情吗?