首页 新闻 会员 周边

读写琐,多线程问题请教

0
悬赏园豆:15 [已解决问题] 解决于 2008-08-24 14:06
我有一个变量,是读的多,写的少,因此,我是否只需要在写的时候进行同步的处理就可以了,但是我看了一些例子,好像是读和写的时候都要做处理,不太理解,高手给讲讲
lexus的主页 lexus | 初学一级 | 园豆:0
提问于:2008-08-23 11:11
< >
分享
最佳答案
0
不可以,因为在高级语言看好像是一条语句,计算机硬件处理时实际上不是一条指令。 操作系统处理也可能会有一些中间过程。也就是说你的写并不是原子操作。在写的过程中实际上有很多中间过程,比如寄存器的读写,内存的读写,硬盘的读写(有可能要对硬盘缓存的虚拟内存中读写),而如果写到一半,就开始读,读出来的很可能是脏数据,特别是对一些比较大的数据结构的读写,发生这种情况的概率会非常大。所以不能只对写进行同步
eaglet | 专家六级 |园豆:17139 | 2008-08-23 16:25
其他回答(2)
0
最好读和写的时候都要做处理一下,防止并发的情况
MushRoom_lb | 园豆:275 (菜鸟二级) | 2008-08-23 11:24
0
这种情况最适合用 lock-free 技术来解决。 当然使用读写锁也行。不过千万不要使用 .NET 自带的 ReaderWriterLock ,性能太低,可以使用 ReaderWriterLockSlim,这个是 .NET 3.5 中用来代替 ReaderWriterLock 的。不过加锁始终无法摆脱死锁和性能问题。 这里有几篇 Paper ,可以参考一下: http://www.cnblogs.com/lucifer1982/archive/2008/03/23/1116981.html http://www.cnblogs.com/lucifer1982/archive/2008/04/16/1154727.html
Angel Lucifer | 园豆:775 (小虾三级) | 2008-08-24 01:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册