我在传递参数的线程上尝试了一个简单的程序。
#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
否:0名称:1�I��^H��H���PTI��0@
否:0名称:1�I��^H��H���PTI��0@
否:0名称:1�I��^H��H���PTI��0@
否:0名称:1�I��^H��H���PTI��0@
否:0名称:1�I��^H��H���PTI��0@
答案 0 :(得分:3)
当main
终止时,mydata
不再存在,但线程仍在运行并访问它。
您应该在退出main
(使用pthread_join
)之前等待生成的线程终止,或者定义mydata
以使其超出main
的范围。< / p>