线程中内存变量问题?

畅想畅享 2004-12-08 08:31:37
typedef struct
{int a;
char b[512];
}mystru;


UINT threadproc(LPVOID pParam)
{
mydlg *pDlg=(mydlg*)pParam;
mystru *stru_1=new mystru
memset(&stru,0,sizoef(stru));
stru->a=1;
stru->b="xmzq";
........
stru->a=1000;
stru->b="adfafafafafaf";

}

void mydlg::start()
{
for(int i=0;i<5;i++)
{
AfxBeginThread(threadproc,(LPVOID)this);
}

}

请问执行start后,启动5个线程,5个线程里的结构变量会不会冲突,引起变量计算异常??????
...全文
135 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangqu_980371 2004-12-09
  • 打赏
  • 举报
回复
都是在堆栈里分配和使用.

"不会的,你的变量都是在线程里定义的,不会有任何的冲突。他们都是在堆栈里的东西"
oyljerry 2004-12-09
  • 打赏
  • 举报
回复
局部变量创建在线程的栈上,不会冲突
全局变量访问时就会有冲突,注意线程同步
oyljerry 2004-12-09
  • 打赏
  • 举报
回复
那个只是定义了结构体的类型
你是用的new的变量
jasn 2004-12-09
  • 打赏
  • 举报
回复
typedef struct
{int a;
char b[512];
}mystru;

只是类型,不是变量
畅想畅享 2004-12-09
  • 打赏
  • 举报
回复
如果线程间都在存取mystru中的变量数据,他们之间会混乱吗?
whwjn 2004-12-09
  • 打赏
  • 举报
回复
《windows高级编程》里面的一段话:
每个线程都从所在的进程的4GB地址空间中分配了自己的栈。当使用
静态或者全局变量时,每个线程有同时访问这些变量,可能会破坏
变量的内容。然而,局部和自动变量,是创建在线程的栈上的,因此
不太可能被另一线程破坏。所以,在编写函数时,要尽量使用局部
或者自动变量,避免使用静态和全局变量。
whwjn 2004-12-09
  • 打赏
  • 举报
回复
不会的
畅想畅享 2004-12-09
  • 打赏
  • 举报
回复
但是
typedef struct
{int a;
char b[512];
}mystru;
是全局变量啊。
EnochShen 2004-12-08
  • 打赏
  • 举报
回复
5个线程里的结构变量会不会冲突,引起变量计算异常??????
不会的,呵呵
mystru *stru_1=new mystru
这一步是不是再最后释放掉好一点?
  • 打赏
  • 举报
回复
目前安全!
w100 2004-12-08
  • 打赏
  • 举报
回复
局部变量=》没事。
要是
全局变量的话,需要考虑
Kudeet 2004-12-08
  • 打赏
  • 举报
回复
不会的,你的变量都是在线程里定义的,不会有任何的冲突。他们都是在堆栈里的东西
cai12345 2004-12-08
  • 打赏
  • 举报
回复
不会的,因为是5个不同的东西

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧