Uri*_*son 6 c# multithreading thread-safety
关于一次从多个线程访问局部变量的几个问题:
我有多个线程编写和读取变量的值,我应该同步访问它吗?
该变量每隔几秒从Thread1更新一次,并且每隔几秒从Thread2读取并更新到数据库.
如果我没有任何逻辑并且没有任何并发问题,可能会出现哪些问题?
我应该使用volatile吗?
编辑:
我想强调一点,我没有任何并发问题.这是我的具体情况:
一个.我的变量名称是pingLatency
,它测量ping延迟
湾 Thread1每10秒发送一次ping 8.8.8.8并将延迟写入pingLatency
C.Thread2使用pingLatency
每10秒的值更新一个correcposing字段.
d.Thread2每次都更新相同的数据库行.
现在,我正在使用此数据库字段来监控网络连接.我的问题是 - 是否存在变量未更新或由于线程安全问题而引发异常的情况?我想避免使用,lock
因为它看起来像是一种矫枉过正.
你怎么看?
volatile
埃里克·利珀特 (Eric Lippert) 认为,不要使用,它过于复杂,语义也很奇怪。小心打破内存模型,C# 大体上遵循大多数其他语言为无数据竞争程序 (SC-DRF) 使用顺序一致性。Volatile 打破了这一点,所以只需使用锁来防止数据竞争。
至于lock
它并没有想象中的那么重,大多数情况下不会在你想象的场景中争用锁。因此在大多数情况下获取锁应该是无痛的。