J'utilise log4net dans une classe avec plusieurs threads et j'ai une question simple. Ai-je besoin d'entrer readlock/writelock lors de la vérification des propriétés et des méthodes d'appel sur l'interface log4net.ILog?Shared Interface et ReaderWriterLockSlim
J'utilise la méthode proposée à partir des exemples de log4net donc au sommet de ladite classe je:
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(decType)
Et puisque la classe implique plusieurs threads en interaction avec elle, j'ai un exemple ReaderWriterLockSlim
que j'utilise pour m'assurer de ne pas entrer dans des conditions de course avec mes variables. Donc, pour résumer, si je veux vous assurer que je pratique le filetage en toute sécurité dois-je faire quelque chose comme ceci:
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
Ou, je peux faire tout simplement ceci:
If log.IsWarnEnabled Then log.Warn("Log Message Here")
post-scriptum Oui, c'est un pseudo-code approximatif, je n'ai pas d'instance de ReaderWriterLockSlim
qui s'appelle 'ReaderWriterLockSlim'.
Merci pour l'édition Steven, j'ai fait beaucoup de travail Linux dernièrement. Oh, et parce que je ne peux pas résister: "sudo fait [steven] un sandwhich". –