MSDN 文档和许多使用ReaderWriterLockSlim
类的示例建议使用以下模式:
cacheLock.EnterWriteLock();
try
{
//Do something
}
finally
{
cacheLock.ExitWriteLock();
}
但我很好奇它是否完全安全。是否有可能在获取锁之后,但在语句之前发生一些异常,try
从而使锁卡在锁定状态?最明显的候选人是ThreadAbortException
。我知道这种情况发生的可能性非常小,但后果非常糟糕——所以我认为值得考虑。我不相信编译器理解这种模式并防止处理器在try
语句之前中断线程。
如果理论上有这种代码不安全的可能性,有没有办法让它更安全?