加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#变量线程安全

发布时间:2020-12-15 05:40:50 所属栏目:百科 来源:网络整理
导读:关于一次从多个线程访问局部变量的几个问题: 我有多个线程编写和读取变量的值,我应该同步访问它吗? 变量每隔几秒从Thread1更新一次,并且每隔几秒从Thread2读取并更新到数据库. 如果我没有任何逻辑并且没有任何并发??问题,可能会出现哪些问题? 我应该使用v
关于一次从多个线程访问局部变量的几个问题:

>我有多个线程编写和读取变量的值,我应该同步访问它吗?
>变量每隔几秒从Thread1更新一次,并且每隔几秒从Thread2读取并更新到数据库.
>如果我没有任何逻辑并且没有任何并发??问题,可能会出现哪些问题?
>我应该使用volatile吗?

编辑:

我想强调一点,我没有任何并发??问题.这是我的具体情况:

一个.我的变量名称是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打破了这个,所以只需使用锁来防止数据竞争.

至于锁定它并不像人们想象的那么沉重,在大多数情况下锁定不会在你想象的场景中发生争用.因此,在大多数情况下获取锁定应该是无痛的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读