c语言 - 为什么我的 pthread 函数没有打印出我所期望的?



我是线程编程的新手,正在学习C.中的线程编程

这个简单的代码编译并运行,但我以为它会同时打印出"你好世界"和数字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);  
}*  

提前感谢!:)

首先,您可能希望在pthread_create之后的某个位置调用pthread_join。如果不这样做,并且主线程退出,则新线程很有可能无法运行。

换句话说,一旦一个线程exit启动,它们就会全部启动——进程不会"等待"其他线程。


您可能还想在printf调用中添加换行符。

程序在main函数结束时终止。在您的程序中,哪个就在您调用pthread_create之后。因此线程没有机会运行。

为了给线程一个运行的机会,您需要让主函数等待线程完成。通过调用pthread_join

除了对方说的(在终止之前给它一个打印东西的机会)之外,您打印时使用了错误的格式说明符,基本上是错误地将变量传输到线程。尝试

tid = *(long*)input_data;  
printf("thread ID: %ldn", tid);

并用CCD_ 8而不是CCD_。(long不会总是正确地转换为指针。)

您应该传递本地变量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);  
}  

最新更新