【发布时间】:2013-07-31 16:27:44
【问题描述】:
关于一次从多个线程访问局部变量的几个问题:
我有多个线程写入和读取一个变量的值,我是否应该同步访问它?
每隔几秒从 Thread1 更新该变量,每隔几秒从 Thread2 读取并更新到数据库。
如果我没有任何逻辑并且没有任何并发问题,会出现哪些问题?
我应该为此使用 volatile 吗?
编辑:
我想强调我没有任何并发问题。这是我的具体方案:
一个。我的变量名称是 pingLatency,它测量 ping 延迟
b. Thread1 每 10 秒向 8.8.8.8 发送一个 ping,并将延迟写入pingLatency
c。 Thread2 每 10 秒更新一个值为pingLatency 的相关字段。
d。 Thread2 每次更新相同的数据库行。
现在,我正在使用此数据库字段来监控网络连接。我的问题是 - 是否存在变量未更新或由于线程安全问题而引发异常的情况?我想避免使用lock,因为它看起来有点矫枉过正。
你怎么看?
【问题讨论】:
-
答案:1. 视情况而定; 2. 视情况而定; 3.地段; 4:可能。您是否尝试过搜索 Stack Overflow 以查找讨论此问题的现有问题?这里有很多与线程安全相关的问题。
-
“局部变量”到底是什么意思?发布一个例子。
-
我假设当您说 variable 时,实际上是指 field,因为 variable 始终是 local,然后您将无法从多个线程访问它。
-
由于第一行的链接,我检查了@Mgets 作为正确答案。
-
@lasse 你可以从多个线程访问本地没有问题。不,变量并不总是本地的。变量是任何存储位置。
标签: c# multithreading thread-safety