码迷,mamicode.com
首页 > 编程语言 > 详细

QT环境下,<POSIX多线程>全局变量共享问题

时间:2016-03-08 21:16:07      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

开始的技术路线是:

 首先有两个主线程:

  1,gui线程

  2,等待客户端socket连接用的,listen线程

  (当有客户端连接时,即creat一个新的线程2用来跟客户端通信,再来新的客户端,继续creat新的work线程3用于通信,以此类推,目前最多可以creat5个线程,即可以同时跟5台客户端通信,设置了监听的socket服务器最多监听5个队列。线程2继续listen)

 

出现的问题是:

  用来通信的work线程3,收到一个来自客户端的xml文件,然后解析文件,并将其数据放在一个全局的静态struct数组里。数据正常,线程2和线程3均可以看到已经更新的数据值。但是,

  当gui线程去访问时,发现数据并没有更新到其线程,在gui线程下改变该全局变量的数值,也并没有更新到线程2和3,不知何解?

 

一博主,有如此解释

其实在Linux 中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone() 。该系统copy 了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。不过这个copy 过程和fork 不一样。copy 后的进程和原先的进程共享了所有的变量,运行环境(clone的实现是可以指定新进程与老进程之间的共享关系,100%共享就表示创建了一个线程)。这样,原先进程中的变量变动在copy 后的进程中便能体现出来。
 
 不过,问题并没有清晰化。
 
想到的解决方案暂时有两种:
  1,不在work线程里面解析数据,直接在gui线程里面解析数据。
   2,采用线程私有数据
 

(此处出现过,小插曲:QT的变量查看器,在调试时不太稳定,更新过后的值在窗口中查看,并没有得到及时更新,需要通过程序判定验证!)

  

QT环境下,<POSIX多线程>全局变量共享问题

标签:

原文地址:http://www.cnblogs.com/Qwells/p/5243417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!