<分区>
没有线程会修改变量。他们都在读书。这样安全吗?
标签 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/