" printf的"在线程上运作得不好?

时间:2013-06-03 09:28:14

标签: c

代码如下:

#include <pthread.h>
#include <stdio.h>
void* fetch();

int main(int argc, char *argv[])
{
    pthread_t tid;
    pthread_create(&tid, NULL, &fetch, NULL);
}


void* fetch()
{
    printf("start...\n");
    int i;
    for (i = 0; i < 100; i++)
    {
        printf("fetch...\n");
    }
    pthread_exit(0);
}

为什么这段代码不能很好地运行我多次运行它。救命!当我做     $ gcc thread_test.c     $。/ a.out的 它什么都没打印出来! 当我跑更多时间时:

耶!打印: 开始... 取...

为什么?

2 个答案:

答案 0 :(得分:9)

当主线程退出时,您的程序将退出。无法保证如何安排线程; fetch有时可能会在main退出之前运行,有时main会先退出。

如果要等待子线程,则需要添加一个调用来加入其线程。

int main(int argc, char *argv[])
{
    pthread_t tid;
    pthread_create(&tid, NULL, &fetch, NULL);
    return pthread_join(tid, NULL);
}

pthread_join的调用会阻止,直到标识为tid的主题退出,这样才能确保所有printf次调用都会被执行。

答案 1 :(得分:1)

使用pthread_join等待第二个帖子..