簡體   English   中英

線程體未執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM