2012-03-26 79 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收集的,那可能会导致资源泄漏,但它在你的程序中并不是问题,或者对于在应用程序结束之前持续存在的线程而言通常是不成问题的。礼仪”,使这是不会被加入了一个分离线程每一个这样的线程。)