C 未执行线程体

C 未执行线程体,c,linux,pthreads,C,Linux,Pthreads,我写了这段代码: #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

我写了这段代码:

#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;
}
#包括
#包括
void*cuoco(void*arg)
{
fprintf(标准,“日化密码库科”);
fprintf(标准,“细尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾);
返回NULL;
}
void*cameriere(void*arg)
{
fprintf(标准,“内部化密码\n”);
fprintf(标准,“细尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾;
返回NULL;
}
void*客户(void*arg)
{
fprintf(标准,“客户信息化”;
fprintf(标准,“优质codice客户”);
返回NULL;
}
int main(int argc,char*argv[])
{
无效*(*例行)(无效*);
无效*结果;
常规=库科;
pthread_t thread_cuoco、thread_camerie、thread_cliente;
pthread_create(&thread_cuoco,NULL,例程,*argv);
返回0;
}
只是为了测试线程如何工作。但是函数cuoco的主体永远不会执行。这是因为它会打印“Inziio codice cuoco”和“fine codice cuoco”,但它不会。您需要使用,以便您的
main
函数在终止程序之前等待线程执行

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

int res = pthread_join(thread_cuoco, NULL);

问题是主线程从
main
返回,这会破坏整个进程并杀死所有线程。从
main
返回类似于调用
exit

作为使用
pthread\u join
的替代方法,您可以通过调用
pthread\u exit
来终止主线程。调用
pthread\u exit
将只终止主线程

POSIX线程化应用程序将一直运行,直到其所有线程退出或进程退出


(如果未使用
pthread_join
收集可连接线程,则可能会导致资源泄漏,但这在程序中不是问题,通常对于一直持续到应用程序结束的线程来说也不是问题。不过,让每个不会连接的线程都成为分离的线程仍然是一种良好的“编程方式”)

。或其他防止主线程退出的方法。pthread_join不是唯一的选择,一般来说,它可能是一个糟糕的选择,例如当工作线程根本不正常退出时。