多个线程同时读取静态变量

时间:2011-12-07 12:48:29

标签: c# .net multithreading static static-variables

我的问题可能是新手或重复,但我想知道当几个线程同时尝试读取静态变量时会发生什么。我现在对同步并不感兴趣,我只是想知道他们是立即还是轮流阅读?

更新: 我的问题更多的是物理领域或类似的那样(=如果它是线程读取变量的同一时刻。

3 个答案:

答案 0 :(得分:7)

如果变量的值没有改变(任何线程没有写入值),那么多线程读取将是一个安全的操作,并且不需要像锁定那样的额外同步。否则,您必须考虑锁定写访问操作。

更新:关于问题更新

在单核CPU的范围内,只能执行一条指令(简化,忽略CPU流水线),因此无法在相同的时间内访问同一内存位置。

答案 1 :(得分:2)

他们无法真正同时访问它 - 在某些时候CPU会对读取进行排序。

答案 2 :(得分:1)

如果是一个读取的静态类型去处理器核心(在所有平台上)那么它就是一个原子操作。如果它是一个较大的类型,需要多个操作来读取或写入,那么它不是原子的,您可以读取在您读取/写入时部分更改它的另一个线程的产品的狡猾值。