关于多线程编程中与全局变量通信的问题

来源:互联网 发布:陶瓷家装行业数据 编辑:程序博客网 时间: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.谢谢!

原创粉丝点击