#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的 它什么都没打印出来! 当我跑更多时间时:
耶!打印: 开始... 取...
为什么?
答案 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
等待第二个帖子..