我是线程编程的新手,正在学习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);
}