여러 스레드가있는 클래스에서 log4net을 사용하고 있으며 간단한 질문이 있습니다. log4net.ILog 인터페이스에서 속성을 확인하고 메소드를 호출 할 때 readlock/writelock을 입력해야합니까?공유 인터페이스 및 ReaderWriterLockSlim
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(decType)
그리고 클래스가 상호 작용 다중 스레드를 포함하기 때문에, 내가 사용하십시오 ReaderWriterLockSlim
인스턴스를 가지고 내가 가진 클래스 상기 상단에 있도록
은 내가 log4net 예에서 제안 된 방법을 사용하고 있습니다 내 변수로 어떤 경쟁 조건에도 빠지지 않도록해야합니다.
If Me.ReaderWriterLockSlim.TryEnterUpgradableReadLock(-1) Then
If log.IsWarnEnabled Then
If Me.ReaderWriterLockSlim.TryEnterWriteLock(-1) Then
log.Warn("Log Message Here")
Me.ReaderWriterLockSlim.ExitWriteLock()
End If
End If
Me.ReaderWriterLockSlim.ExitUpgradeableReadLock()
End If
또는, 나는 단지이 수행 할 수 있습니다 :
If log.IsWarnEnabled Then log.Warn("Log Message Here")
P.S.을 요약하자면 그래서, 난 내가 이런 식으로 뭔가를해야 할 안전 스레딩을 연습하고 있습니다 있는지 확인하려면 예, 그것은 대략적인 의사 코드입니다. 실제로 'ReaderWriterLockSlim'이라는 ReaderWriterLockSlim
의 인스턴스가 없습니다.
편집 스티븐에게 감사드립니다. 저는 최근에 많은 리눅스 작업을하고 있습니다. 오, 그리고 내가 저항 할 수 없기 때문에 : "sudo는 [스티븐]을 모래로 만든다." –