多线程操作全局变量的问题(有点复杂,需要考虑线程的优先级问题)

博客讨论了在多线程环境中,一个全局的CStringArray变量如何在主线程和两个编辑线程(A、B)间安全共享。主线程需要高效无阻塞地读取数据,而线程A和B则进行编辑操作。文章提出了线程同步问题,包括使用CCriticalSection避免资源冲突,以及在不同类中定义和使用CCriticalSection全局变量的困难。博主寻求解决方案,以确保主线程的执行效率不受影响,并解决全局变量声明的编译问题。
摘要由CSDN通过智能技术生成
情况是这样的,我有一个CStringArray类型的全局变量 g_listArray,它需要被三个线程进行如下操作:

程序主线程:需要频繁对g_listArray 进行查询、取值操作,但不会修改或删除g_listArray 的内容;
A线程:无规律地间歇性对g_listArray进行编辑操作,包括添加、修改、删除;
B线程: 无规律地间歇性对g_listArray进行编辑操作,包括添加、修改、删除;

我的要求是:主线程对执行效率的要求非常高,每当它需要使用g_listArray 值的时候,一定得马上能够获取到,也就是它不能被阻塞。

现在我的问题是:

1)主线程只是对全局变量进行读取操作,它会不会与线程A或线程B产生资源访问冲突?如果全局变量只是简单的 int  或 bool 类型的话,我估计不会,但我的全局变量是CStringArray 类型,如果线程A或线程B正在以for循环对 g_listArray 进行编辑操作,而此时恰好主线程也需要以for循环读取g_listArray 的值,这时候会发生什么情况?

2)线程A和线程B对 g_listArray 的访问冲突我可以通过CCriticalSection g_cs变量,对可能冲突的代码进行lock和unlock处理,这个好理解。但是我也遇到一个问题: 线程A和线程B分别在两个类中定义的,我试图在stdafx.h文件中定义一个extern CCriticalSection g_cs类型的全局变量,这样在任何类中都可以使用g_cs变量了,但是却发现编译出错,不能像定义其它全局变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值