线程体未执行

时间:2012-03-26 11:26:52

标签: 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 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”,但它不会。

2 个答案:

答案 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收集可连接线程,这可能导致资源泄漏,但这不是程序中的问题,或者通常是在应用程序结束之前持续存在的线程。但是,它仍然是良好的“编程方式”,使每一个不会被加入分离线程的线程。)