ReaderWriterLockSlim
에 몇 가지 문제가 있습니다. 나는 그것이 어떻게 작동 하는지를 이해할 수 없다.ReaderWriterLockSlim 및 async await
내 코드 : 나는 < 1>에 쓰기 잠금을 입력하면
private async Task LoadIndex()
{
if (!File.Exists(FileName + ".index.txt"))
{
return;
}
_indexLock.EnterWriteLock();// <1>
_index.Clear();
using (TextReader index = File.OpenText(FileName + ".index.txt"))
{
string s;
while (null != (s = await index.ReadLineAsync()))
{
var ss = s.Split(':');
_index.Add(ss[0], Convert.ToInt64(ss[1]));
}
}
_indexLock.ExitWriteLock();<2>
}
는, 디버거에서 나는 _indexLock.IsWriteLockHeld
이 true
것을 볼 수 있지만, 실행 단계에 < 2> 내가 _indexLock.IsWriteLockHeld
이 false
및 _indexLock.ExitWriteLock
입니다 참조 SynchronizationLockException
에 "쓰기 잠금이 해제되지 않고 해제 중입니다."라는 메시지와 함께 예외가 발생합니다. 내가 뭘 잘못 했니?
어떻게'_indexLock'가 초기화됩니까? 다른 스레드가'LoadIndex()'에 동시에 그것을 초기화 할 수 있습니까? –
어쩌면 _indexLock에 대한 액세스 권한이있는 다른 스레드가 다시 초기화하는 중입니다 ... 다른 스레드에서 풀어 낼 수는 없지만 새로운 인스턴스에 모두 다시 초기화 될 수 있습니다 ... –
스레드가 필요하지 않습니다. _indexLock을 덮어 씁니다. –