为什么我的pthread功能打印出我的预期?

时间:2012-08-31 13:29:06

标签: c pthreads printf

我是线程编程的新手,也是在C语言中学习线程编程的阶段。

这个简单的代码编译并运行,但我认为它会打印出“hello world”和8号,但它不会。有人知道这个的原因吗?

void *threadfunc(void *input_data){  
    printf("Hello World");  
    long tid;  
    tid=(long)input_data;  
    printf("thread ID: &d", tid);  
    return NULL;  
    sleep(1);  
}  
int main(){  

    long t = 8;  
    int t1;  
    pthread_t thread_obj;  
    t1= pthread_create(&thread_obj, NULL,threadfunc, (void*)t);  
}*  

提前致谢! :)

4 个答案:

答案 0 :(得分:8)

首先,您可能希望在pthread_create之后调用pthread_join。如果你不这样做并且主线程退出,则有一个(相当不错的)机会新线程将无法运行

换句话说,一旦一个线程exit,他们都做了 - 该过程不会“等待”其他线程。


您可能还想在printf来电中添加换行符。

答案 1 :(得分:3)

程序终止于main功能的末尾。在致电pthread_create之后,您的计划中的内容正确无误。因此线程没有机会运行。

为了让线程有机会运行,你需要让main函数等待线程完成。致电pthread_join

答案 2 :(得分:0)

除了对方说的话(给它一个机会在终止之前打印一些东西),你用错误的格式说明符打印一个基本上得到的变量转移到错误的线程。尝试

tid = *(long*)input_data;  
printf("thread ID: %ld\n", tid);

并使用&t而不是(void*)t调用线程函数。 (long并不总是正确地转换为指针。)

答案 3 :(得分:0)

您应该传递本地变量的地址t     t1 = pthread_create(& thread_obj,NULL,threadfunc,(void *)& t);

你的线程函数应该是这样的

void *threadfunc(void *input_data){  
printf("Hello World");  
long tid;  
tid=*(long *)input_data;  
printf("thread ID: %ld", tid);  
sleep(1);  
}  
相关问题