Ich schrieb einen C# -Code, um einen nicht verwalteten Thread zusammen mit anderen verwalteten Threads in Mono auszuführen. Der nicht verwaltete Thread ist in Echtzeit, da er mit Xenomai-Bibliotheken unter Verwendung eines Wrappers erstellt wird. Der nicht verwaltete Thread führt eine in C# (verwalteten Code) geschriebene Funktion aus. Ich sah, dass der Thread wegen der Prioritätsumkehrung vom GC blockiert wurde (ich vermutete), also versuchte ich nur feste Felder zu verwenden. Das Endergebnis wird jedoch nicht verändert. Natürlich arbeite ich auf Linux und ich verwende Mono-JIT-Compiler-Version 3.2.6Warum ein nicht verwalteter Thread in Mono wegen des Garbage Collectors eingefroren wird, während nur feste Felder verwendet werden?
Warum ein unmanaged Thread in Mono friert es aufgrund der Garbage Collector ein, während nur feste Felder verwenden?
Danke!
Dies ist die pseudo-fuction
function_thread(){
fixed(my_fields){
while(true){
my_code_use_only_fixed_fields;
}
}
}
N.B. Die Mono-Laufzeitumgebung registriert automatisch alle Threads, die mit dem Garbage Collector aus der verwalteten Welt erstellt wurden. Für Entwickler, die Mono einbetten, ist es wichtig, dass sie alle zusätzlichen Threads, die sie erstellen, mit der Laufzeit registrieren, die verwaltete Objekte mit mono_thread_attach manipulieren. Sie können dieses Konzept in diesem
P.S. finden. Ich nehme an, dass der Thread nicht angeschlossen ist, dann weiß der Müllsammler nichts von seiner Existenz. Ich nehme das an, weil ich den Thread nicht angehängt habe.
Muss Ihr nicht verwalteter Thread einen Rückgabewert von der verwalteten Funktion erhalten, die er aufruft? Wenn nicht, sollten Sie in Betracht ziehen, es nicht direkt von der nicht verwalteten Seite aus aufzurufen, sondern stattdessen den nicht verwalteten Thread zu verwenden, um einem anderen verwalteten Thread den Aufruf zu signalisieren (z. B. über Wait-Handles oder Ähnliches). – nicholas
Die verwaltete Funktion wird nicht vom nicht verwalteten Thread aufgerufen, aber sie ist die Funktion des Threads. –