pthread_join () Detaillierte und Experimente

pthread_join () Funktion Prototype:

int pthread_join(pthread_t thread, void **retval);
args:
    pthread_t thread: 被连接线程的线程号
    void **retval : 指向一个指向被连接线程的返回码的指针的指针
return:
    线程连接的状态,0是成功,非0是失败

1. Warum Gebrauch pthread_join ()

In vielen Fällen auf der Haupt - Thread zu erstellen und ein Kind Thread zu starten, wenn das Kind Thread zu viel zeitaufwendiger Vorgang, oft vor dem Kind der Haupt - Thread Faden enden wird, aber wenn der Haupt - Thread , das Geschäft mit anderen Dingen fertig ist, müssen zu befassen sie mit den Ergebnissen des Unterfadens, der die Haupt - Thread Bedürfnisse warten länger nach dem Ende der Unter Thread - Ausführung ist diese Zeit abgeschlossen ist, sollten wir pthread_join () -Methode hat verwenden.
Diese Klage pthread_join () kann verstanden werden: das Hauptthread Warte Terminator - Thread. Das heißt, Unter Thread ruft pthread_join () Methode Code zurück, und nur bis zum Ende des Teilgewindes ausführen kann.

Wenn ein Thread Thread B und pthread_join () ruft ein Gewinde bis zum Ende des Gewindes B blockiert wird, wird ein Thread-Ausführung fortzusetzen. Wenn pthread_join () zurück, wird der anrufende Faden des Ende im wahrsten Sinne betrachtet, wird sein Speicherraum freigegeben (wenn der aufrufende Thread nicht-isoliert). Hier sind drei Dinge zu beachten:

  1. Veröffentlicht Speicherplatz ist nur Raumfahrtsysteme, müssen Sie manuell den Raum klar für das Programm, wie malloc () Speicherplatzzuweisung.
    2. Ein Thread kann nur an einem Faden verbunden werden.
    3. Anschlussgewinde sein muss , nicht isoliert, oder wird die Verbindung falsch sein.
    Es kann zwei Effekte gesehen pthread_join () hat sein:

  2. Warten auf das andere Ende des Fadens: Wenn Sie pthread_join () aufrufen, wird der aktuelle Thread blockiert, bis nach dem Ende des Fadens aufgerufen wird, wird der aktuelle Thread die Ausführung fortzusetzen.

  3. Fädeln Ressourcen für das Recycling: Wenn ein Thread ist nicht isoliert (Threads standardmäßig erstellt sind nicht isoliert) und verwendet nicht pthread_join den Faden (), dann nach dem Ende des Fadens nicht frei sein Speicherplatz, die dazu führen können Dieser Thread ist ein „Zombie Thread“ werden.

2. Verwendung

pthread_t tid;
pthread_create (& tid, NULL, thread_run, NULL);
pthread_join (TID, NULL);
pthread_join Verfahren direkt nach einem Gewinde auf der Linie Aufruf zu schaffen.

3. Testcode

Sie können den Effekt sehen durch den Code ausgeführt wird, wissen wir:

#include "stdafx.h" 
#include <pthread.h> 
#include <stdio.h> 
#include <Windows.h> 
#pragma comment(lib, "pthreadVC2.lib") 

static int count = 0; 

void* thread_run(void* parm) 
{ 
for (int i=0;i<5;i++) 
{ 
count++; 
printf("The thread_run method count is = %d\n",count); 
Sleep(1000); 
} 
return NULL; 
} 

int main() 
{ 
pthread_t tid; 
pthread_create(&tid, NULL, thread_run,NULL); 
// 加入pthread_join后,主线程"main"会一直等待直到tid这个线程执行完毕自己才结束 
// 一般项目中需要子线程计算后的值就需要加join方法 
pthread_join(tid,NULL); 
// 如果没有join方法可以看看打印的顺序 
printf("The count is = %d\n",count); 
getchar(); 
return 0; 
}

Plus die pthread_join () -Methode zu drucken:

Wenn die Innenseite der pthread_join () Verfahren zum Drucken kommentiert:

Sie können sehen, dass, wenn es keine Erhöhung pthread_join () Methode ist, Haupt-Thread, der von links direkt ausführen, werden wieder hinzugefügt, nachdem erst nach Ausführung von Code-Thread ausgeführt werden warten.



 

Veröffentlicht 136 Originalarbeiten · erntete Lob 71 · Ansichten 160 000 +

Ich denke du magst

Origin blog.csdn.net/u012308586/article/details/104680338
Empfohlen
Rangfolge