1
3
编辑 事实证明,终结器中抛出的异常根据定义是致命的:
笔记 :即使异常可能起源于函数内部,但这并不意味着它将在该函数的上下文中处理。事实上,堆叠本应被解开:
我不明白为什么锁起来不安全。(通常需要注意的是:持有锁时不要进行阻塞操作…)。 然而,您可能需要在这里再三考虑可重入性和无限递归:
|
2
0
嗯,我找了一些东西,从MSDN上找到了这个: 形式的锁语句
哪里
除了
当持有互斥锁时,在同一执行线程中执行的代码也可以获得并释放该锁。但是,在释放锁之前,在其他线程中执行的代码被阻止获取锁。
因此,如果由于
有了这些信息,我将有95%的把握,你不会因为试图从你的
|
3
0
为子孙后代。。。一些测试代码:
发生的情况是,如果finalizerTest因为应用程序离开main而最终确定,则输出为:
但是,如果它由于GC.Collect/WWaitForPending终结器而被终结,则它读取:
这意味着,在应用程序关闭时终结器抛出异常的特定情况下,您可能无法获得锁,但在这种情况下,应用程序和终结队列已经出现严重问题,锁定并不会使情况变得更糟。
在其他每一次测试中,我都能想到一切都如预期的那样发生,
|
Administrator · c#-等待完成2个线程中的1个 6 年前 |
Magnar Myrtveit · 发送电子邮件的脚本中出现死锁 7 年前 |
BlackBrain · MySQL死锁,带有引发触发器的插入 8 年前 |
Patt · ExecutorService和ForkJoinPool 8 年前 |