2011-01-13 23 views
3

Ich habe zwei Threads, die miteinander kommunizieren; Jeder Thread verwendet 'while (1) ..'. Jetzt muss ich die Threads nach einer bestimmten erfüllten Bedingung beenden lassen und damit die Anwendung beenden.POSIX-Threads und Beenden eines Threads

Meine Frage: Ist es sicher, nur '(NULL)' aus dem Thread zurückzugeben, oder muss ich auch 'pthread_exit' oder 'pthread_join' Funktionen verwenden?

Antwort

3

Es ist sicher, null aus den Thread-Funktionen zurückzugeben; Der Code, der auf sie wartet, sollte in Ordnung sein.

POSIX sagt von pthread_exit():

Ein impliziten Aufruf pthread_exit() gemacht wird, wenn ein Thread andere als das Gewinde in dem main() wurde zuerst kehrt von der Startroutine aufgerufen, die verwendet wurde, um es zu schaffen .

Sie etwas tun müssen mit pthread_join() für den Thread warten, es sei denn, das Gewinde mit pthread_detach() später mit dem abgelösten Attribut oder freistehend erstellt wurde.

3

Aufruf pthread_exit(NULL) und Rückgabe NULL am Ende der ursprünglichen Funktion des Threads sollte gleichwertig sein. Wenn Sie jedoch beides alleine tun, führt dies zu einem Ressourcenleck. Um dies zu vermeiden, müssen Sie entweder pthread_join für den Thread eines anderen Threads aufrufen oder den Thread in den gelöschten Zustand versetzen, indem Sie pthread_detach darauf aufrufen oder festlegen, dass der Thread im gelöschten Zustand gestartet wird, bevor er erstellt wird.

Verwandte Themen