关于多线程编程中与全局变量通信的问题
来源:互联网 发布:陶瓷家装行业数据 编辑:程序博客网 时间:2024/05/16 15:24
这二天在做一个东东,功能是这样的。主线程往list写数据,数据元素类型是char*,即声明list变量是这样的:list<char*> g_pList。而其他次线程要做的事是读取这个list中的数据,次线程会利用这些数据做些事情。
好了,让我们来看看代码吧。
main Thread:
void SomeFun(void)
{
.......
EnterCriticalSection(&g_csForList); //通过临界区实现同步(不知这个说法是否正确)
g_pList.push_back(p);
LeaveCriticalSection(&g_csForList);
.......
}
Sub_Thread:
DWORD WINAPI Sub_Thread(pvoid pv)
{
for (list<const TCHAR*>::iterator iter = g_pList.begin();
iter != g_pList.end(); iter ++)
{
// do something
}
}
代码就是这么点。呵呵
接着就是debug了,发现在sub_Thread中,我始终无法获取push进去的数据。但在main thread 这个SomeFunc函数可以获取push到list中的数据,但为什么在Sub_thread无法获取,搞了半天,查了一些资料,最后发现原来是这样的:
在我的主线程的SomeFunc这个函数中,变量p只是一个局部指针变量,对局部指针变量,我们知道出了函数体,它的内容是通常不会是原来写的数据。这样,我们可以解释为什么在SomeFunc这个函数体内,而到我们的Sub_Thread体内无法获取数据了。好了,既然找到了问题,那无法就new来处理这个问题了。当我不知道如何在erase 这些节点时同时释放new出来的内存,请高手指教。
从这里我们也可以看出,语言基础是十分重要的。这个问题在林锐的高质量讲过,但我这个问题应该是变相的返回一个局部指针变量,在这写出来有二点希望各位注意:
1、并不是所有的多线程问题和同步或线程之间的配合有关
2、要把语言基础夯实
欢迎你与我交流,我的QQ:99282122.谢谢!
- 关于多线程编程中与全局变量通信的问题
- SOCKET通信中多线程编程的性能优化问题
- 关于在多线程中,局部变量和全局变量的使用。
- 关于linux中多线程编程的一些初级问题
- 关于全局变量初始化与赋值问题的思考
- 关于全局变量的初始化问题与野指针
- PHP中关于在函数内引用全局变量的问题
- 关于静态库中使用全局变量可能导致的问题
- 关于java 多线程编程的同步问题
- 关于全局变量赋值的问题
- 关于DSP中全局变量与局部变量的使用
- 关于DSP中全局变量与局部变量的使用
- 关于DSP中全局变量与局部变量的使用
- 关于DSP中全局变量与局部变量的使用
- 关于DSP中全局变量与局部变量的使用
- 关于DSP中全局变量与局部变量的使用
- 关于DSP中全局变量与局部变量的使用
- 关于DSP中全局变量与局部变量的使用
- 优化ASP.NET应用程序性能研究与探讨
- 优化ASP.NET应用程序性能研究与探讨
- JSEclipse的安装设置
- MySQL Cluster 群集安装环境介绍
- 如何在页面正确输出汉字?
- 关于多线程编程中与全局变量通信的问题
- asp.net 获取服务器信息
- 移动终端之争引起的创新(转载)
- ASP.Net 2.0的Web.config配置
- Linux必学的60个命令
- Tomcat 5.5不能使用EL表达式¥{}的解决方法
- 软件加密狗-宏狗
- 转贴:心态决定命运,不要为打翻的牛奶哭泣!
- ASP.NET使用Global.asax进行全局错误处理