【发布时间】:2014-04-26 02:02:39
【问题描述】:
Albahari Threading section about ReaderWriterLockSlim 显示了此储物柜的使用情况。但是没有任何 try-catch 和 finally 阻止例外情况。
为什么他没有使用异常处理来保持打开的锁?在下面的示例中,如果 DivideBy 参数为 0,则写锁保持打开状态。
所以他尝试简单地显示用法而不是使示例变得复杂?如果是这样,处理这个问题的最佳做法是什么?如果它被持有,我们应该总是使用 finally 块作为退出锁吗?
public class Divide
{
static int x = 1000;
static ReaderWriterLockSlim locker = new ReaderWriterLockSlim();
public void DivideBy(int divide)
{
locker.EnterWriteLock();
x = x / divide;
locker.ExitWriteLock();
}
}
【问题讨论】:
-
我假设如果在锁内抛出异常,那么随着错误在调用堆栈中上升,锁被释放
-
@Jonesy 让我们从传入的答案中查看哪个是正确的。我也想知道这个。
-
你为什么不试试呢?
-
我实际上已经过测试,但线程是复杂的主题。我的测试表明它保持打开状态,但我目前仍不确定 %100。
-
为什么不按照前面的评论提到的MSDN example...try/finally。
标签: c# .net multithreading thread-safety readerwriterlockslim