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

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

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

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

这种情况该怎么处理?

大家线程之间的共享数据都怎么解决?
...全文
173 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
你应该互斥访问,当一个在更改的时候,另一个就不要更改。
回复
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-03-30 08:51
社区公告
暂无公告