특히에있는 GC에 대해, CLR이 컬렉션을 시작하려고 할 때를 읽었습니다. 콜렉션이 발생하기 전에 스레드를 일시 중단해야한다는 것을 이해하지만 스레드 명령어 포인터가 안전한 지점에 도달 할 때이를 수행해야한다고 언급합니다. 안전한 지점에 있지 않은 경우에는 신속하게 하나를 얻으려고 시도하고 스레드를 hijacking
(스레드 스택에 특수 함수 포인터를 삽입)하면됩니다. 그게 다 괜찮아요, 멋져요,하지만 기본적으로 관리 스레드가 안전하다고 생각 했나요?GC 동작 및 CLR 스레드 하이재킹
처음에는 관리되지 않는 스레드를 참조했을 수도 있지만 CLR을 사용하면 사용중인 개체가 고정되어 있어야하므로 관리되지 않는 스레드가 계속 실행될 수 있습니다.
따라서 관리되는 스레드에서
safe point
은 무엇이며 어떻게 GC가이를 결정할 수 있습니까?
편집 :
나는 내가 충분히 특정 당하고 있다고 생각하지 않습니다. this MSDN article에 따르면 Thread.Suspend
이 호출 될 때도 safe point
에 도달 할 때까지 스레드가 실제로 일시 중단되지 않습니다. 또한 safe point
은 가비지 콜렉션이 수행 될 수있는 쓰레드 실행 지점이라는 것을 계속 설명합니다.
내 질문에 내가 분명하지 않다고 생각합니다. 스레드는 안전한 시점에서만 일시 중지 될 수 있으며 GC에 대해 일시 중지해야한다는 것을 알고 있지만 안전한 지점이 무엇인지 명확한 답을 찾을 수 없습니다. 코드의 한 부분을 안전하다고 판단하는 것은 무엇입니까?
CLR이 아닌 CLR이 안전합니다. –