Estaba leyendo sobre GC en el libro CLR via C#
, específicamente sobre cuándo el CLR quiere comenzar una colección. Entiendo que tiene que suspender los subprocesos antes de que se produzca una recopilación, pero menciona que tiene que hacer esto cuando el puntero de instrucción de subprocesos alcanza un punto seguro. En los casos en que no está en un punto seguro, trata de llegar a uno rápidamente, y lo hace por hijacking
el hilo (insertando un puntero de función especial en la pila de hilos). Eso está bien y muy bien, pero pensé que los hilos administrados por defecto estaban a salvo.GC Behavior y CLR Thread Hijacking
Inicialmente pensé que podría haberse referido a subprocesos no administrados, pero el CLR permite que los subprocesos no administrados continúen ejecutándose porque cualquier objeto que se utilice debería haber sido anclado de todos modos.
Entonces, ¿qué es un
safe point
en un hilo administrado, y cómo puede el GC determinar qué es eso?
EDIT:
no creo que estaba siendo lo suficientemente específica. De acuerdo con this MSDN article, incluso cuando se llama a Thread.Suspend
, el hilo no se suspenderá hasta que se alcance safe point
. Continúa para indicar que un safe point
es un punto en una ejecución de subprocesos en el que se puede realizar una recolección de elementos no utilizados.
Creo que no estaba claro en mi pregunta. Me doy cuenta de que un hilo solo puede suspenderse en un punto seguro y deben suspenderse para un GC, pero parece que no puedo encontrar una respuesta clara en cuanto a qué punto seguro es. ¿Qué determina que un punto del código sea seguro?
Seguro por el CLR, no por el CLR. –