[英]C# variable thread safety
关于同时从多个线程访问局部变量的几个问题:
我有多个线程写入和读取变量的值,我是否应该同步访问它?
该变量每隔几秒从 Thread1 更新一次,每隔几秒从 Thread2 读取并更新到数据库。
如果我没有任何逻辑并且没有任何并发问题,会出现哪些问题?
我应该为此使用 volatile 吗?
编辑:
我想强调的是,我没有任何并发问题。 这是我的具体场景:
一种。 我的变量名称是pingLatency
,它测量 ping 延迟
湾 pingLatency
每 10 秒向 8.8.8.8 发送一个 ping 并将延迟写入pingLatency
C. 线程2更新一个correcposing字段的值pingLatency
各10秒。
d. Thread2 每次更新相同的数据库行。
现在,我使用这个数据库字段来监控网络连接。 我的问题是 - 是否存在变量未更新或由于线程安全问题而引发异常的情况? 我想避免使用lock
因为它看起来有点矫枉过正。
你怎么认为?
volatile
,根据 Eric Lippert 的说法,它过于复杂并且语义非常奇怪。小心打破内存模型,C# 大体上遵循大多数其他语言为无数据竞争程序 (SC-DRF) 使用顺序一致性。 Volatile 打破了这一点,所以只需使用锁来防止数据竞争。
至于lock
也没有想象中的那么重,大多数情况下,你想象的场景中锁是不会争用的。 因此在大多数情况下获取锁应该是无痛的。
如果您想要 .NET 托管并行性,请使用内置的好东西。 任务并行性。 这将为您管理线程,您可以使用内置的线程安全变量,就像数组/列表等于 ConcurrentBag 等一样。
如果对您的变量的访问是原子的并且没有逻辑问题,那么您就可以了。 根据这个就可以知道,如果你使用的是原子变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.