#include <stdio.h>
#include <string.h>
#include <pthread.h>
int count=0;
//测试多次可以看出,每次输出结果不相同,会获取到不正常的重复数据。
//多线程环境在getStringFromFd方法中的static区域 会获取到上修改过的数据,故函数内部的static char line[512];在多线程环境下是不安全的。
char* getStringFromFd(int tid)
{
//static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间
static char* line[512]={0};
sleep(1);
//system("ping www.baidu.com -c 1");
count++;
sprintf(line,"tid=%d,cout=%d",tid,count);
return line;
}
int getStringFromFd2(int tid,char* name)
{
char* line[512]={0};
count++;
sprintf(line,"tid=%d,cout=%d",tid,count);
strcpy(name,line);
return 0;
}
void* threadfun(void* param)
{
printf("run\n");
int j=0;
for(j=0;j<5;j++)
{
pthread_t tid=pthread_self();
char* name=getStringFromFd(tid);
printf("%s\n",name);
// char name[512]={0};
// getStringFromFd2(tid,name);
// printf("%s\n",name);
}
//sleep(1);
pthread_exit(0);
}
int main(int argc,char* argv[])
{
pid_t mid;
int i=0;
for(i=0;i<5;i++)
{
pthread_create(&mid,NULL,threadfun,NULL);
}
int n;
scanf("%d",&n);
printf("finish n=%d\n",n);
return 0;
}
c++之多线程环境下static的坑
最新推荐文章于 2024-06-29 10:00:00 发布