2012-03-26 11 views
0

ich diesen Code geschrieben:Gewindekörper nicht ausgeführt

#include <stdio.h> 
#include <pthread.h> 

void* cuoco(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cuoco\n"); 
    fprintf(stderr,"Fine codice cuoco\n"); 
    return NULL; 
} 

void* cameriere(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cameriere\n"); 
    fprintf(stderr,"Fine codice cameriere\n"); 
    return NULL; 
} 

void* cliente(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cliente\n"); 
    fprintf(stderr,"Fine codice cliente\n"); 
    return NULL; 
} 

int main(int argc, char* argv[]) 
{ 
    void* (*routine)(void*); 
    void* result; 
    routine=cuoco; 
    pthread_t thread_cuoco,thread_cameriere,thread_cliente; 
    pthread_create(&thread_cuoco,NULL,routine,*argv); 
    return 0; 
} 

Nur um zu testen, wie Fäden der Körper der Funktion cuoco work.But nie wird executed.This weil es gedruckt wird „Inizio codice cuoco“ und „fein codice cuoco "aber das tut es nicht.

Antwort

8

Sie müssen pthread_join verwenden, damit Ihre main-Funktion wartet, bis der Thread ausgeführt wird, bevor das Programm beendet wird.

pthread_create(&thread_cuoco,NULL,routine,*argv); 

int res = pthread_join(thread_cuoco, NULL); 
+1

..oder einige andere Mittel, um den Austritt des Hauptfadens zu verhindern. pthread_join ist nicht die einzige Wahl und kann im Allgemeinen eine schlechte sein. wenn die Arbeitsfäden normalerweise nicht austreten. –

0

Das Problem ist, dass Ihre primäre Thread kehrt von main die den gesamten Prozess zerstört und tötet alle Fäden. Die Rückkehr von main ähnelt dem Aufruf 10.

Als Alternative zur Verwendung von pthread_join können Sie Ihren primären Thread durch einen Anruf an pthread_exit beenden. Durch den Aufruf von pthread_exit wird nur der primäre Thread beendet.

Eine POSIX-Thread-Anwendung wird so lange ausgeführt, bis alle Threads beendet sind oder bis der Prozess beendet wird.

(Wenn Joinable Threads nicht mit pthread_join gesammelt werden, kann dies zu einem Ressourcenverlust führen, aber es ist kein Problem in Ihrem Programm oder im Allgemeinen für Threads, die bis zum Ende der Anwendung bestehen. Trotzdem ist es gut "Programmierung Manieren ", um jeden solchen Faden, der nicht zu einem losgelösten Faden verbunden wird, zu machen.