Dot-Net
在 .NET 中的 GC 期間安全地暫停執行緒
.NET 中的執行緒在 GC 期間暫停。CLR 如何安全地暫停執行緒?像 Win32 SuspendThread API 這樣以殘酷的方式停止執行緒會帶來什麼風險?
這是關於 .NET Compact Framework 的,但我認為對於普通的 .NET 來說是正確的:http: //blogs.msdn.com/b/abhinaba/archive/2009/09/02/netcf-gc-and-thread-blocking .aspx
在實際執行 GC 之前,CLR 會嘗試進入“安全點”。每個執行緒都有一個與之關聯的掛起事件,並且每個執行緒都會定期檢查該事件。在啟動 GC 之前,CLR 會列舉所有託管執行緒並在每個執行緒中設置此事件。線上程檢查並找到此事件集的下一點,它會阻塞等待事件重置(這發生在 GC 完成時)。