难道线程无法访问全局变量吗?大家线程之间的共享数据都怎么解决?

BlueanGel 2005-03-30 08:51:00
CArray<STRU, STRU&> arryGlobalStruct;

上面是我定义的全局变量,类型是数组,可是线程中只要对数组进行 Add 或者 SetAt 操作

整个程度都会挂掉, GetAt 就没问题

这种情况该怎么处理?

大家线程之间的共享数据都怎么解决?
...全文
266 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Ldh 2005-03-31
  • 打赏
  • 举报
回复
是不是连接时用的运行库不对?
clovefjp 2005-03-31
  • 打赏
  • 举报
回复
用消息或者事件来同步控制吧。
晨星 2005-03-31
  • 打赏
  • 举报
回复
唉,up。
俺就用critical section访问过全局的CList,好像没什么问题嘛。
BlueanGel 2005-03-31
  • 打赏
  • 举报
回复
up
oyljerry 2005-03-31
  • 打赏
  • 举报
回复
可能这个自定义的STRU的数据访问有问题
sjcode 2005-03-31
  • 打赏
  • 举报
回复
写一个类,把它做为成员数据,手动实现一下它的互斥。

再把它设为全局变量或指针。

每到一处,extennd它就是了。
gnixemos 2005-03-31
  • 打赏
  • 举报
回复
选择多线程库
BlueanGel 2005-03-30
  • 打赏
  • 举报
回复
还是不行... 错误都是 Runtime error, 具体没说

主线程和一个副线程都没问题,可再开副线程就有问题了

CArray 还不能用 volatile... 55555

头疼了
晨星 2005-03-30
  • 打赏
  • 举报
回复
要不读和写一起锁,读的时候不许写,写的时候也不许读。
晨星 2005-03-30
  • 打赏
  • 举报
回复
调试一下,什么错误?
先开一个线程,看看错误会不会发生?
BlueanGel 2005-03-30
  • 打赏
  • 举报
回复
用了临界对象锁定,还是会提示错误...
有没有好点的折中办法?
头疼死了
BlueanGel 2005-03-30
  • 打赏
  • 举报
回复
csGlobalArray.Lock();
arryGlobalStruct.SetAt(iIndex, StructElement);
csGlobalArray.Unlock();

奇怪,为什么我还是会提示错误?
晨星 2005-03-30
  • 打赏
  • 举报
回复
别忘了:
include <afxmt.h>
晨星 2005-03-30
  • 打赏
  • 举报
回复
CArray<STRU, STRU&> arryGlobalStruct;
CCriticalSection csGlobalArray;

然后在每一个线程需要修改的时候这样:
cs.Lock();
arryGlobalStruat.SetAt(....);
cs.Unlock();
晨星 2005-03-30
  • 打赏
  • 举报
回复
你应该互斥访问,当一个在更改的时候,另一个就不要更改。

15,471

社区成员

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

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