[英]Thread argument printing garbage values
我在传递参数的线程上尝试了一个简单的程序。
#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;
}
输出:
angus @ ubuntu:〜/ angus / thread $ ./a.out
no:0名称:1 I ^H H PTI 0@
no:0名称:1 I ^H H PTI 0@
no:0名称:1 I ^H H PTI 0@
no:0名称:1 I ^H H PTI 0@
no:0名称:1 I ^H H PTI 0@
当main
终止时, mydata
不再存在,但线程仍在运行并访问它。
您应该在退出main
(使用pthread_join
)之前等待生成的线程终止,或者定义mydata
以使其超出main
范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.