2

我是线程编程的新手,并且正处于学习 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

4 回答 4

8

首先,您可能想pthread_join在某个地方之后打电话pthread_create。如果你不这样做并且主线程退出,那么新线程很有可能没有机会运行

换句话说,一旦一个线程exits,它们都会这样做 - 进程不会“等待”其他线程。


您可能还想在printf通话中添加换行符。

于 2012-08-31T13:30:51.887 回答
3

main程序在函数结束时终止。在您调用pthread_create. 因此线程没有机会运行。

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

于 2012-08-31T13:31:35.907 回答
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);  
}  
于 2012-08-31T14:38:49.333 回答
0

除了其他人所说的(给它一个在终止之前打印一些东西的机会)之外,您正在使用错误的格式说明符进行打印,并且基本上将变量传输到线程错误。尝试

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

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

于 2012-08-31T14:03:03.800 回答