多线程对累加计算的影响

_yjp 发布于 2013/08/27 11:36
阅读 471
收藏 0

每个线程对一个全局变量进行一次++操作(没有加锁),等待所有线程join完毕,得到累加的最后结果。

直接运行这样的线程框架得到的结果是一样的,但在加入业务代码(跟变量++操作毫无关系,只是多了一些中断睡眠之类)获得得结果有时会不一样。

环境为Linux qt c++(没有依赖q的库),debug运行出现的概率大一些,直接运行没有出现

 

加载中
0
小耶果
小耶果
简单的++就用原子操作吧,或者改变设计方式采用无锁设计.
0
袁不语
袁不语
共享变量不加锁(或CAS),这也太狂野来了一点儿。
0
moyiguke
moyiguke

val++.这个还是要加锁的把,涉及到了数据读取,更改,写入。因为是全局变量,线程不能提供变量的线程安全性,不同线程看到的就不一样了。

写加锁的辅助方法。然后调用方法执行变量的递增操作和读取操作。    


0
中山野鬼
中山野鬼
估计你代码里有其他东西,执行时间长,有些部分没执行到。
返回顶部
顶部