小编M P*_*oet的帖子

是.Net POCO的Threadsafe吗?

这个问题可能看起来有些奇怪,但与可能的可见性问题有关.这个问题的灵感来自Java编程语言(> jdk5)中的一个案例,考虑:

public class InmutableValue {
  private int value;
  public InmutableValue(int value) {this.value = value;}
  public int getValue() {return value;}
}
Run Code Online (Sandbox Code Playgroud)

尽管有相反的信念,但上述课程并非线程安全.在多线程环境中,"value"不保证对其他线程可见.为了使其成为线程安全,我们需要强制实施"先发生"规则.这可以通过标记字段'final'来完成.

这个案例让我想知道.Net运行时是否也是如此.所以举个例子:

public class InmutableValue {
  private int value;
  public InmutableValue(int value) {this.value = value;}
  public int Value { get{return value;}}
} 
Run Code Online (Sandbox Code Playgroud)

据我所知,将值字段标记为'readonly'不会给出与'final'对java相同的保证(但我可能非常错误,希望如此).那么我们是否需要将字段标记为"易变"(或使用内存屏障等)以确保其他线程的可见性?或者是否有其他规则可以确保可见性?

.net c# concurrency visibility thread-safety

5
推荐指数
1
解决办法
507
查看次数

标签 统计

.net ×1

c# ×1

concurrency ×1

thread-safety ×1

visibility ×1