MSDN文档以及许多使用ReaderWriterLockSlim
类的示例都建议使用以下模式:
cacheLock.EnterWriteLock();
try
{
//Do something
}
finally
{
cacheLock.ExitWriteLock();
}
但我很好奇这是否完全安全。在获取锁之后,但在try
语句之前,是否可能发生某些异常,使锁定状态被卡住?最明显的候选人是ThreadAbortException
。我知道这种情况的概率非常小,但后果非常严重 - 所以我认为值得思考。我不认为编译器理解此模式并防止处理器在try
语句之前中断线程。
如果存在理论上的不安全可能性,那么有没有方法使其更安全?
cahceLock
的处理。 - JodrellMonitor.Enter
和ThreadAbortionException
的交互非常微妙。请参阅Eric Lippert博客上的C# IL代码生成的微妙之处。在C# 4中,lock
模式生成不同的代码以避免这种情况。 - CodesInChaos