C#变量线程安全
关于一次从多个线程访问局部变量的几个问题:
>我有多个线程编写和读取变量的值,我应该同步访问它吗? 编辑: 我想强调一点,我没有任何并发??问题.这是我的具体情况: 一个.我的变量名称是pingLatency,它测量ping延迟 湾Thread1每10秒发送一次ping 8.8.8.8并将延迟写入pingLatency C. Thread2每10秒更新一次具有pingLatency值的correcposing字段. d. Thread2每次都更新相同的数据库行. 现在,我正在使用此数据库字段来监控网络连接.我的问题是 – 是否存在变量未更新或由于线程安全问题而引发异常的情况?我想避免使用锁,因为它看起来像是一种矫枉过正. 你怎么看? 解决方法
>是的,您应该同步对它的访问,如果它是原始类型,则有
methods to do this for you without locks
>没有评论 >不确定你的意思…最有可能你最终会将错误的值插入数据库 > Don’t use volatile ,per Eric Lippert,它过于复杂,语义非常奇怪.
小心打破内存模型,C#大体上遵循大多数其他语言使用顺序一致性的数据无竞争程序(SC-DRF). Volatile打破了这个,所以只需使用锁来防止数据竞争. 至于锁定它并不像人们想象的那么沉重,在大多数情况下锁定不会在你想象的场景中发生争用.因此,在大多数情况下获取锁定应该是无痛的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |