【发布时间】:2011-03-07 18:00:05
【问题描述】:
在回答关于 SO 的另一个问题* 以及随后的评论讨论时,我遇到了一个我不清楚的问题。
在我误入歧途的任何地方纠正我......
当垃圾收集器收集一个对象时,它会在单独的线程上调用该对象的终结器(除非终结器已被抑制,例如通过 Dispose() 方法)。收集时,GC 会挂起除触发收集的线程之外的所有线程(后台收集除外)。
不清楚的地方:
- 垃圾收集器在收集之前是否等待终结器对该对象执行?
- 如果不是,它是否会在终结器仍在执行时取消挂起线程?
- 如果它确实等待,如果终结器遇到被挂起线程之一持有的锁,会发生什么?终结器线程是否死锁? (在我的回答中,我认为这是一个糟糕的设计,但我可能会看到可能发生这种情况的情况)
* 原始问题的链接:
.NET GC Accessing a synchronised object from a finalizer
【问题讨论】:
标签: c# garbage-collection finalizer