Domanda

In .NETTO, dopo questo codice, qual è il meccanismo si ferma la Thread l'oggetto in garbage collection?

new Thread(Foo).Start();
GC.Collect();

Sì, è sicuro supporre qualcosa è un riferimento al thread, mi è stato appena errante che cosa esattamente.Per qualche motivo Riflettore non mi mostra System.Threading, quindi non posso scavare me (so che microsoft ha rilasciato il codice sorgente per l' .NET framework, non ho a portata di mano).

È stato utile?

Soluzione

Il runtime mantiene un riferimento al thread finchè è in esecuzione.Il GC abituato a raccogliere, come qualcuno ancora mantiene riferimento.

Altri suggerimenti

Dipende se il thread è in esecuzione o meno.Se si è appena creata oggetto del Thread e non si avvia, è un normale oggetto gestito, cioèammissibili per GC.Non appena si avvia il filo, o quando si ottiene un oggetto Thread già thread in esecuzione (GetCurrentThread) è un po ' diverso.La "oggetto esposto", gestito Thread, è adesso tenetevi forte di riferimento all'interno di CLR, in modo da ottenere sempre la stessa istanza.Quando termina thread, questo riferimento forte è uscito, e l'oggetto gestito saranno raccolti non appena non ci sono altri riferimenti (ora morto) Thread.

Si tratta di un hard-wired funzione di garbage collector.L'esecuzione di thread non vengono raccolti.

Beh, è sicuro supporre che, se un thread è in esecuzione da qualche parte che c'è un riferimento ad esso in modo non sarebbe sufficiente per interrompere la procedura di garbage collection?

Punto importante da notare: se il thread è contrassegnato con IsBackground=True, da non impedire l'intero processo di uscita

Assegnare il nuovo Thread per un locale di campo?

class YourClass
{
  Thread thread;

  void Start()
  {
    thread = new Thread(Foo);
    thread.Start();
    GC.Collect();
  }
}

Garbage Collection raccoglie tutto ciò che non è di riferimenti, in modo che nel tuo codice non c'è campo/variabile che fa riferimento al thread, in modo che saranno raccolti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top