2012-03-26 166 views
0

我這樣寫代碼:螺紋體

#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; 
} 

只是爲了測試線程如何work.But功能Cuoco的身體從未executed.This因爲它應打印「Inizio codice Cuoco的」和「精codice cuoco「,但事實並非如此。

回答

8

您需要使用pthread_join,以便您的main函數在終止程序之前等待該線程執行。

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

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

..或防止主線程的退出的一些其他手段。 pthread_join不是唯一的選擇,並且通常可能是一個糟糕的選擇,例如。當工作線程根本不會正常退出時。 – 2012-03-26 11:50:34

0

的問題是,從main這破壞了整個過程,並殺死所有線程主線程返回。從main返回與調用exit類似。

作爲使用pthread_join的替代方法,您可以通過致電pthread_exit來終止您的主線程。調用pthread_exit將僅終止主線程。

甲POSIX線程的應用程序繼續工作,直到其全部線程退出,或者直到處理退出。如果可連接的線程不是用pthread_join收集的,那可能會導致資源泄漏,但它在你的程序中並不是問題,或者對於在應用程序結束之前持續存在的線程而言通常是不成問題的。禮儀」,使這是不會被加入了一個分離線程每一個這樣的線程。)