【发布时间】:2009-08-27 20:33:29
【问题描述】:
我在一个有多个线程的类中使用 log4net,我有一个简单的问题。在log4net.ILog接口上查看属性和调用方法时需要输入readlock/writelock吗?
我正在使用 log4net 示例中的建议方法,所以在所述类的顶部我有:
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(decType)
由于该类涉及与其交互的多个线程,因此我有一个ReaderWriterLockSlim 实例,用于确保我的变量不会进入任何竞争条件。所以回顾一下,如果我想确保我正在练习安全线程,我需要做这样的事情:
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")
附:是的,这是粗略的伪代码,我实际上没有名为“ReaderWriterLockSlim”的ReaderWriterLockSlim 实例。
【问题讨论】:
-
感谢 Steven 的编辑,我最近做了很多 linux 工作。哦,因为我无法抗拒:“sudo make [steven] a sandwhich”。
标签: .net vb.net multithreading log4net thread-safety