多线程Linux程序没有给出预期的输出

时间:2012-03-30 15:35:23

标签: c linux multithreading printf

这是我的代码,我用以下代码编译:

gcc thread.c -lpthread

它没有打印任何错误或警告。但是当我运行它时,该程序不会打印任何内容。

平台:Ubuntu 11.10 64位gcc 4.6.1
退出状态:0

当我调试它时,我发现它按照我的预期打印hello

这是我的代码:

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

void *loopPrint(void *ptr)
{
    char *p = (char *)ptr;
    while (1)
    {
        printf("%s\n", p);
    }
}

void *pClock(void *ptr)
{
    sleep(3);
    exit(0);
}

int main()
{
    pthread_t showMsg, clock;
    int main_pth, wait_pth;
    char *msg = "Hello";
    main_pth = pthread_create(&showMsg, NULL, loopPrint, (void *)msg);
    wait_pth = pthread_create(&clock, NULL, pClock, NULL);

    pthread_join(main_pth, NULL);
    pthread_join(wait_pth, NULL);
    return 0;
}

2 个答案:

答案 0 :(得分:4)

pthread_join(main_pth, NULL);

这是错误的,pthread_joinpthread_t作为参数。替换为:

pthread_join(showMsg, NULL);

(与另一个相同。)

并且检查这些呼叫的返回值,它们可以并且确实失败 顺便说一下,你在睡眠呼叫中缺少#include <unistd.h>

答案 1 :(得分:2)

main_pth等是pthread_create的错误返回,而不是线程ID。等待(“加入”)showMsgclock