-4

代码如下:</p>

#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 时,它什么也没有打印出来!当我运行它更多时间时:

耶!打印输出:开始...获取...

为什么?

4

2 回答 2

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的调用会阻塞,直到具有 id 的线程tid退出,这样可以保证您的所有printf调用都将被执行。

于 2013-06-03T09:29:27.617 回答
1

用于pthread_join等待第二个线程..

于 2013-06-03T09:30:22.483 回答