首页 新闻 会员 周边 捐助

关于 多线程访问同一实例

0
悬赏园豆:10 [已解决问题] 解决于 2018-06-21 08:51

两个线程。一个线程对于这个实例写操作(改变这个实例的某些属性值)

一个线程对于这个实例读操作(读这个实例的某个属性值)

 

问题一:

那么,如果我就这样,不进行lock的话,会不会出现两个线程同时写/读而出现冲突?(即使几率很低)

 问题二:

那么如果我lock的话,lock第一个线程的写方法,lock第二个线程的读方法,结果是:当正在执行第一个线程的写方法时, 第二个线程的读方法由于无法读取这个实例而被阻塞,直到这个实例被第一个线程写完。

不知道我这样理解的对吗?因为我看网上几乎所有例子都是多个现成共同执行同一段代码,所以只lock一个方法。

猝不及防的主页 猝不及防 | 老鸟四级 | 园豆:2878
提问于:2018-06-19 17:14
< >
分享
最佳答案
0

就算你LOCK不代表读线程就能读到最新数据,CPU是有缓存的。当然并发频率不高是没问题的。

收获园豆:7
56180825 | 小虾三级 |园豆:1749 | 2018-06-19 19:09

bu用读到最新数据,就是说不lock的话有效几率会出现问题,那我这么lock的方式对吗

猝不及防 | 园豆:2878 (老鸟四级) | 2018-06-20 08:34

@猝不及防:

1.冲突读写并没有问题,不会出错。如果你不要求最新数据的话无所谓的。

2.理解没毛病,建议读写锁ReaderWriterLockSlim

56180825 | 园豆:1749 (小虾三级) | 2018-06-20 19:29
其他回答(1)
0

内存是满足可读可写的,同时读写本身是不存在问题的。

这个冲突取决于你所认为 —— 

比如写了一半,但读可判断,可抛弃或其他;

收获园豆:3
花飘水流兮 | 园豆:13617 (专家六级) | 2018-06-19 17:30

na如果是同时写的话,我第二个问题的理解有问题吗

支持(0) 反对(0) 猝不及防 | 园豆:2878 (老鸟四级) | 2018-06-19 18:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册