GC Behavior and CLR Thread Hijacking

Я читал о GC в книге CLR через C # , в частности о том, когда CLR хочет запустить сбор . Я понимаю, что он должен приостановить потоки до того, как произойдет сбор, но он упоминает, что он должен сделать это, когда указатель инструкции потока достигает безопасной точки. В тех случаях, когда он не в безопасной точке, он пытается добраться до о ne быстро, и это достигается путем перехвата потока (вставки специального указателя функции в стек потока). Это все прекрасно, но я думал, что управляемые потоки по умолчанию безопасны?

Сначала я подумал, что это могло относиться к неуправляемым потокам, но CLR позволяет неуправляемым потокам продолжать выполнение, потому что любой используемый объект все равно должен был быть закреплен. .

Итак, что такое безопасная точка в управляемом потоке, и как GC может определить, что это такое?

РЕДАКТИРОВАТЬ:

Я не думаю, что я был достаточно конкретным. Согласно этой статье MSDN , даже когда вызывается Thread.Suspend , поток фактически не будет приостановлен до тех пор, пока не будет достигнута безопасная точка . Далее говорится, что безопасная точка - это точка в выполнении потоков, в которой может выполняться сборка мусора.

Думаю, я не совсем понял свой вопрос. Я понимаю, что поток может быть приостановлен только в безопасной точке, и они должны быть приостановлены для GC, но я не могу найти четкого ответа о том, что такое безопасная точка. Что определяет безопасный фрагмент кода?

13
задан Christopher Currens 6 December 2011 в 18:57
поделиться