[英]Thread argument printing garbage values
I was trying a simple program on threads passing the arguments. 我在传递参数的线程上尝试了一个简单的程序。
#include<stdio.h>
#include<pthread.h>
#include<malloc.h>
#define NUMTHREADS 5
typedef struct _data_t{
int data;
char* name;
}_data;
void* mythread(void* arg){
_data* mydata = (struct _data_t*) arg;
printf("\n no : %d name : %s \n",mydata->data,mydata->name);
pthread_exit(NULL);
}
int main(){
pthread_t tid[NUMTHREADS];
_data mydata;
mydata.data = 100;
mydata.name = "Netapp";
int i;
for(i=0;i<NUMTHREADS;i++){
pthread_create(&tid[i],NULL,&mythread,(void*)&mydata);
}
pthread_exit(NULL);
return 0;
}
Output : 输出:
angus@ubuntu:~/angus/thread$ ./a.out angus @ ubuntu:〜/ angus / thread $ ./a.out
no : 0 name : 1 I ^H H PTI 0@ no:0名称:1 I ^H H PTI 0@
no : 0 name : 1 I ^H H PTI 0@ no:0名称:1 I ^H H PTI 0@
no : 0 name : 1 I ^H H PTI 0@ no:0名称:1 I ^H H PTI 0@
no : 0 name : 1 I ^H H PTI 0@ no:0名称:1 I ^H H PTI 0@
no : 0 name : 1 I ^H H PTI 0@ no:0名称:1 I ^H H PTI 0@
When main
terminates, mydata
ceases to exist, but the threads are still running and accessing it. 当
main
终止时, mydata
不再存在,但线程仍在运行并访问它。
You should either wait for the spawned threads to terminate before you exit main
(using pthread_join
), or define mydata
so that it outlives scope of main
. 您应该在退出
main
(使用pthread_join
)之前等待生成的线程终止,或者定义mydata
以使其超出main
范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.