Was ist der Unterschied zwischen einem getrennten thread-und daemon-thread?
Verstehe ich, dass alle daemon threads sind detached threads, aber warum sind alle detached threads, die nicht-daemon?
Sagen thread "main" erstellt-thread "Ein"(non-detached) und thread zu "Ein" erzeugt thread "B"(freistehende). Kann thread "A" Ausgang und "B" läuft weiter?
PS: ich Frage mit Verweis auf pthreads, aber bitte beantworten Sie unabhängig.
InformationsquelleAutor sgowd | 2012-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht solltest du zuerst Lesen Was ist der Unterschied zwischen Gabel und Faden?
Mehr erarbeiten
Daemon-Thread
In der Regel in C/C++ (Linux Umfeld) entsteht ein daemon mit fork(). fork() erstellt einen neuen Prozess, indem Sie dupliziert den aufrufenden Prozess. Hier der übergeordnete Prozess würde exit verlassen der Kind-Prozess hinter sich. Dieses Kind-Prozesses löst sich vom kontrollierenden terminal, öffnet alle {stdin, stdout, stderr} /dev/null, und ändern Sie das Arbeitsverzeichnis auf das root-Verzeichnis. (basierend auf Fahnen, natürlich). Unter Linux ist fork() implementiert ist die Verwendung von copy-on-write Seiten, so ist die einzige Strafe, die es eingeht, ist die Zeit und der Speicher, die benötigt werden, um Duplikat der übergeordneten Seite Tabellen, und erstellen Sie eine einzigartige task-Struktur für das Kind.
Getrennten Thread
Während der Pthread-Einfamilienhaus-Verhalten ist anders (1) Der getrennten thread kann nicht beigetreten werden wieder einmal gelöst (2) Das alleinstehende Attribut lediglich bestimmt, das Verhalten des Systems, wenn der thread beendet; es verhindert nicht, dass der thread nicht beendet werden, wenn der Prozess beendet mit exit (oder was dasselbe ist, wenn der Haupt-thread gibt). Die pthread_detach() Funktion markiert den thread identifiziert, die von thread als gelöst. Bei einem getrennten thread beendet wird, werden seine Ressourcen automatisch wieder freigegeben, um das system ohne die Notwendigkeit für einen anderen thread auf, gemeinsam mit den beendeten thread.
InformationsquelleAutor enthusiasticgeek
Ich denke, in Bezug auf Speicher-Modell, es ist möglich, dass Ein thread beenden können, während thread B kann weiterhin ausgeführt. Außerdem, das Programm wird beendet, wenn es keine user-threads... oder Sie können denken, nur der daemon-threads bleiben, damit die Anwendung am Ende in unterschiedlicher Weise
InformationsquelleAutor cat_minhv0