2009-12-08 8 views
21

Es ist recht gut dokumentiert, dass wenn der automatische Garbage Collector von .NET ausgeführt wird, alle laufenden verwalteten Threads, die der Anwendungsdomäne zugeordnet sind, vorübergehend angehalten werden. Was ich nicht entdecken konnte, sind Details darüber, was mit nativen Threads geschieht, die von der Anwendung erstellt werden, wenn die Garbage Collection stattfindet (zB mit _beginthreadex() anstelle von System.Threading.Thread()). Sind sie ähnlich pausiert oder läuft der Link?.NET Garbage Collection und Native Threads

+1

Requisiten auf die große Frage. (props ++) –

+0

Siehe auch [hier] (http://stackoverflow.com/questions/8404245/gc-behavior-and-clr-thread-hijacking) und [hier] (https://msdn.microsoft.com/de) -us/Bibliothek/678ysw69.aspx). – Nicholas

Antwort

20

Hilft this?

„Ein GC wird Fäden nicht aufhören, die nicht laufenden Code verwaltet werden. Da diese Threads können nicht die sowieso Haufen GC berühren werden, gibt es keine Notwendigkeit für die GC mit ihnen zu koordinieren.“

„Wenn ein Thread in verwaltetem Code wurde aber zu nativen Code genannt, wird es laufen weiter. Es wird angehalten, wenn es zurück an verwalteten Code zurückgibt.“

+0

+1 Schöne Verbindung. Sehr interessante Sachen. Ich hoffe, es macht Ihnen nichts aus, ich habe Ihren Beitrag bearbeitet, um das relevante Bit aus dem Blog einzufügen, falls es offline geht. –

+2

Das ist interessant. Warum können diese Threads den GC-Heap nicht berühren? Was ist mit 'gcroot ' und Freunden? –

+0

Sobald ein nativer Thread verwalteten Code verwendet, wird er beim Garbage Collector registriert. Wenn der GC ausgeführt wird, wird der Thread daher ausgesetzt. Erst wenn der Thread stirbt, wird er nicht mehr registriert. –