가 무슨 의미가 있습니다.
잠금 및 잠금 해제를 추적하기 만하면 교착 상태에 도달하면 시스템이 정지하고 마지막 "Enter"키를 누르면 잠금 스레드 방향이 표시됩니다.
public class ReaderWriterLockSlimExtended : ReaderWriterLockSlim
{
private Thread m_currentOwnerThread = null;
private object m_syncRoot = new object();
public Thread CurrentOwnerThread
{
get
{
lock (m_syncRoot)
{
return m_currentOwnerThread;
}
}
}
public Thread CurrentOwnerThreadUnsafe
{
get
{
return m_currentOwnerThread;
}
}
public new void EnterWriteLock()
{
lock (m_syncRoot)
{
base.EnterWriteLock();
m_currentOwnerThread = Thread.CurrentThread;
}
Debug.WriteLine("Enter Write Lock - Current Thread : {0} ({1})", CurrentOwnerThread.Name, CurrentOwnerThread.ManagedThreadId);
}
public new void ExitWriteLock()
{
Debug.WriteLine("Exit Write Lock - Current Thread : {0} ({1})", CurrentOwnerThread.Name, CurrentOwnerThread.ManagedThreadId);
lock (m_syncRoot)
{
m_currentOwnerThread = null; //Must be null before exit!
base.ExitWriteLock();
}
}
}
20에서 30 사이의 스레드가 있습니다. 쓰레드를 가져간 사람은 멀리 떨어진 메서드에서 호출 스택을 보았을 때 충분하지 않았기 때문에 readerwriterlock이 이미 현재 소유자를 나타내는 속성을 가지기를 바랬습니다. –
당신이 말했듯이 자손이라고 나는 생각합니다. –
20 개 또는 30 개의 스레드가 있다면 각 스레드를 돌아 다니는 것보다 지루할 수 있습니다. 그러나 교착 상태에 빠진다고 말하면 모든 스레드가 같은 위치에서 대기하고 하나의 스레드가 "호출"등에서 기다리고있는 것을 볼 수 있습니다. 스레드 패널의 "위치 열"을 빠르게 살펴보십시오. –