Tôi đã đọc về GC trong cuốn sách CLR via C#
, cụ thể là khi nào CLR muốn bắt đầu một bộ sưu tập. Tôi hiểu rằng nó phải đình chỉ các chủ đề trước khi một bộ sưu tập xảy ra, nhưng nó đề cập rằng nó phải làm điều này khi con trỏ chỉ dẫn luồng đạt đến một điểm an toàn. Trong trường hợp nó không ở một điểm an toàn, nó sẽ cố gắng nhanh chóng, và nó làm như vậy bởi hijacking
luồng (chèn một con trỏ hàm đặc biệt trong ngăn xếp luồng). Đó là tất cả tốt và dandy, nhưng tôi nghĩ rằng chủ đề quản lý theo mặc định được an toàn? Tôi đã bước đầu nghĩ rằng nó có thể đã được đề cập đến các chủ đề không được quản lý, nhưng CLR cho phép các chủ đề không được quản lý tiếp tục thực hiện vì bất kỳ đối tượng nào đang được sử dụng cũng phải được ghim.Hành vi GC và CLR Chủ đề Hijacking
Vì vậy,
safe point
trong chuỗi được quản lý là gì và cách GC có thể xác định đó là gì?
EDIT:
Tôi không nghĩ mình đủ cụ thể. Theo số this MSDN article, ngay cả khi Thread.Suspend
được gọi, luồng sẽ không thực sự bị tạm ngưng cho đến khi đạt được safe point
. Nó tiếp tục tuyên bố rằng safe point
là một điểm trong việc thực thi luồng mà tại đó một bộ sưu tập rác có thể được thực hiện.
Tôi nghĩ rằng tôi không rõ ràng trong câu hỏi của mình. Tôi nhận ra rằng một Chủ đề chỉ có thể bị đình chỉ tại một điểm an toàn và họ phải bị đình chỉ cho một GC, nhưng tôi dường như không thể tìm ra câu trả lời rõ ràng về điểm an toàn là gì. Điều gì quyết định một điểm trong mã như là an toàn?
An toàn bằng CLR, không phải từ CLR. –