gpt4 book ai didi

C#变量线程安全

转载 作者:太空狗 更新时间:2023-10-29 21:45:08 25 4
gpt4 key购买 nike

关于同时从多个线程访问局部变量的几个问题:

  1. 我有多个线程写入和读取一个变量的值,我是否应该同步访问它?

  2. 变量从线程 1 每隔几秒更新一次,从线程 2 每隔几秒读取一次并更新到数据库。

  3. 如果我没有任何逻辑并且没有任何并发​​问题,会出现哪些问题?

  4. 我应该为此使用 volatile 吗?

编辑:

我想强调的是,我没有任何并发​​问题。这是我的具体场景:

一个。我的变量名称是 pingLatency,它测量 ping 延迟

Thread1 每 10 秒向 8.8.8.8 发送一个 ping,并将延迟写入 pingLatency

Thread2 每 10 秒用 pingLatency 的值更新一个相应的字段。

Thread2 每次都更新相同的数据库行。

现在,我正在使用这个数据库字段来监控网络连接。我的问题是 - 是否存在变量未更新或由于线程安全问题而引发异常的情况?我想避免使用 lock 因为它看起来有点矫枉过正。

你怎么看?

最佳答案

  1. 是的,你应该同步访问它,如果它是原始类型,则有 methods to do this for you without locks
  2. 无可奉告
  3. 不确定您的意思...很可能您最终会向数据库中插入错误的值
  4. Don't use volatile, per Eric Lippert,它过于复杂,语义也很奇怪。

小心打破内存模型,C# 大体上遵循大多数其他语言,为无数据争用程序 (SC-DRF) 使用顺序一致性。 Volatile 打破了这一点,所以只需使用锁来防止数据竞争。

至于,它并没有想象的那么重,大多数情况下锁不会在你想象的场景中被竞争。因此在大多数情况下获取锁应该是无痛的。

关于C#变量线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com