[英]Thread body not executed
我寫了這段代碼:
#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”,但不會執行。
您需要使用pthread_join
,以便您的main
函數在終止程序之前等待線程執行。
pthread_create(&thread_cuoco,NULL,routine,*argv);
int res = pthread_join(thread_cuoco, NULL);
問題是您的主線程從main
返回,這破壞了整個進程並殺死了所有線程。 從main
返回類似於調用exit
。
作為使用pthread_join
的替代方法,您可以做的是通過調用pthread_exit
終止主線程。 調用pthread_exit
將僅終止主線程。
POSIX線程化應用程序一直運行,直到其所有線程退出,或者直到進程退出為止。
(如果未使用pthread_join
收集可連接的線程,則可能導致資源泄漏,但這不是程序中的問題,或者對於持久到應用程序末尾的線程通常不是問題。這仍然是一種很好的“編程方式”每個不會加入的此類線程都是分離線程。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.