0
ReaderWriterLockSlim允许使用一个锁来管理对资源的访问,允许多个线程读取或独占访问以进行写入。目前我们有以下代码:资源上的多个ReaderWriterLockSlim
public ReaderWriterLockSlim protDataA = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
public ReaderWriterLockSlim protDataB = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
public void AMethod(ClassA Aobject)
{
try
{
protDataA.EnterWriteLock();
//change A-typed-object
}
finally
{ protDataA.ExitWriteLock(); }
}
public void BMethod(ClassB Bobject)
{
try
{
protDataB.EnterWriteLock();
//change B-typed-object
}
finally
{ protDataB.ExitWriteLock(); }
}
现在,如果我需要保护A和B类型对象的数据应该是什么方法,为什么?
//Approach-1 - Making multiple locks on a single block
public void ABMethod(ClassA Aobject, ClassB Bobject)
{
try
{
protDataA.EnterWriteLock();
protDataB.EnterWriteLock();
//change A-typed-object
//change B-typed-object
}
finally
{
protDataA.ExitWriteLock();
protDataB.ExitWriteLock();
}
}
//Approach-2 - Or Making a single lock would serve the same purpose ?
public void ABMethod(ClassA Aobject, ClassB Bobject)
{
try
{
protDataA.EnterWriteLock();
//change A-typed-object
//change B-typed-object
}
finally
{
protDataA.ExitWriteLock();
}
}
如果我调用'BMethod'和'ABMethod'的第二种方法,两者都不能同时写入?你是否真的需要同时锁定两个,你能采取一个你需要的然后拿走另一个吗? –
@ScottChamberlain,你会建议用所有3种方法(AMethod,BMethod,ABMethod)中的单个锁定对象替换两个锁定对象protDataA和protDataB吗?即使A对象正在改变,该线程也会等待访问B对象。 –