我在这里看到了这些图:http://msdn.microsoft.com/en-us/library/ee787088.aspx 好几年,我以为我理解了它们。然而,当我试图想象线程中发生了什么事实上我无法实现..
让我们说 - 当GC不在专用线程上运行但在触发GC的线程中运行时。
查看名为“垃圾收集过程中会发生什么”的部分。
请参阅红色箭头 - 这应该是在用户线程上运行的GC。
因此,假设我有一个在线程中运行的worker方法,并且该worker运行循环。然后在GC kciks的某个时间点......
我的问题是 - 我的线程在GC开始然后结束时究竟会发生什么。
答案 0 :(得分:1)
GC如何在其他人的线程上执行?它没有,因为“你的”线程并不是你的线程;他们是CLR的主题!
CLR可以使用你的线程堆栈,更不用说线程的代码了,它允许它做一些名为thread hijacking
的事情。基本上,它修改了调用堆栈上的返回指针,这样,一旦当前方法返回,您的代码将转移到允许垃圾收集器运行的特殊函数中。 GC完成后,程序可以返回到用户代码中的适当位置,并且一切正常。