首页新闻找找看学习计划

多线程下 数据脏读的问题

0
悬赏园豆:100 [已解决问题] 解决于 2015-04-06 15:31

我们碰到一个神奇的多线程问题:

我们的程序并发量比较大,同一个对象,会被多个线程读取和修改(读取和修改到不会同时进行)。现在出现一个问题,A线程修改了Obj对象的属性,5s后B线程读取到的值还是 A线程修改前的值,但是C线程已经读到A线程修改的结果。

你碰到过这么神奇的事情吗?

问题补充:

因为我们程序,只是同一个对象属性 被不同的线程访问,而且时间上存在比较大的跨度,并发一般意义上的并发。

 

为什么会这样?

t-lz的主页 t-lz | 初学一级 | 园豆:114
提问于:2015-04-03 17:14
< >
分享
最佳答案
-2

需要lock.

收获园豆:100
Firen | 大侠五级 |园豆:5483 | 2015-04-03 17:18

因为我们程序,只是同一个对象属性 被不同的线程访问,而且时间上存在比较大的跨度,并发一般意义上的并发。

 

为什么会这样?

t-lz | 园豆:114 (初学一级) | 2015-04-03 17:21

是我们程序实现上,没有控制好并发。现在用了 锁 做了控制。

t-lz | 园豆:114 (初学一级) | 2015-04-06 15:32
其他回答(4)
0

请描叙的更清楚点,最后贴上关键代码

 

如果已经加了锁,或者原子替换,请检查是否是对象存在多份

JasNature | 园豆:451 (菜鸟二级) | 2015-04-03 17:42
0

用队列处理。可能会降低性能,会保证安全。

气质优雅的猪 | 园豆:283 (菜鸟二级) | 2015-04-03 17:59
0

确实很神奇。

第一并发量很大,到底是多大。

第二时间跨度很大,到底是多大。

第三这个世界上从来只缺没有BUG的代码,有BUG的代码或是解决方案满地跑。

啥都不说,你猜吧。

爱编程的大叔 | 园豆:29862 (高人七级) | 2015-04-03 18:00
0

不要意思,各位亲,是我们程序逻辑弄得比较复杂。 已经找到逻辑上的bug。

 

谢谢各位的关注!

t-lz | 园豆:114 (初学一级) | 2015-04-06 15:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册