简体   繁体   English

线程参数打印垃圾值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM