情况是这样的,我有一个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变量了,但是却发现编译出错,不能像定义其它全局变
程序主线程:需要频繁对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变量了,但是却发现编译出错,不能像定义其它全局变