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對象。 –