c# - 多个线程读取静态对象是否安全?

标签 c# thread-safety

<分区>

没有线程会修改变量。他们都在读书。这样安全吗?

最佳答案

这取决于您的线程正在共享哪些资源。考虑以下示例:

public class MyClass
{
    private int i;
    public int Foo { get { return i++; } } 
}

public static class SharedResources
{
    public static const string SharedString;
    public static readonly MyClass SharedMyClass;
}

在此代码示例中,对 SharedString 的引用是线程安全的,因为字符串在 C# 中是只读的。但是,任何线程都可以随时调用 SharedResources.SharedMyClass.Foo,并且由于增量不是线程安全的(除非使用 Interlocked.Increment ),读取此属性的线程可能会得到不一致的结果。

简而言之,如果一个类的公共(public) API 是只读的,但其内部结构不是线程安全的,那么简单地让多个线程从中读取它是不安全的。

关于c# - 多个线程读取静态对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15595416/

相关文章:

c# - 如何在运行时更改补间动画的 endValueString?

c# - 关于基于ServiceStack的服务类型命名的问题

c# - CsvHelper - 将多列读入单个列表

C# 让线程在出队时休眠?

multithreading - 响应式(Reactive)扩展 OnNext 线程安全

c# - 为什么 ImmutableArray.Create 复制现有的不可变数组?

c# - 在代码中填充 LINQ 表?

multithreading - 编译时-pthread和-lpthread之间的区别

java - 在Android中什么时候应该使用锁,什么时候应该使用synchronized?有区别吗?

Java 线程 "synchronized"