我写了这段代码:
#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;
}
只是为了测试线程是如何工作的。但是cuoco函数的主体永远不会执行。因为它会打印“Inizio codice cuoco”和“fine codice cuoco”,但它不会。
答案 0 :(得分:8)
您需要使用pthread_join
,以便您的main
函数在终止程序之前等待线程执行。
pthread_create(&thread_cuoco,NULL,routine,*argv);
int res = pthread_join(thread_cuoco, NULL);
答案 1 :(得分:0)
问题是你的主线程从main
返回,它会破坏整个进程并杀死所有线程。从main
返回与调用exit
类似。
作为使用pthread_join
的替代方法,您可以通过调用pthread_exit
来终止主要线程。调用pthread_exit
将仅终止主线程。
POSIX线程应用程序一直运行,直到所有线程退出,或者直到退出该进程。
(如果不使用pthread_join
收集可连接线程,这可能导致资源泄漏,但这不是程序中的问题,或者通常是在应用程序结束之前持续存在的线程。但是,它仍然是良好的“编程方式”,使每一个不会被加入分离线程的线程。)