没有线程会修改变量。他们都在阅读。这样安全吗?
答案 0 :(得分:5)
这取决于您的线程共享的资源。请考虑以下示例:
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
),读取此属性的线程可能会得到不一致的结果。
简而言之,如果一个类的公共API是只读的,但其内部不是线程安全的,那么只要有多个线程读取它就不安全。
答案 1 :(得分:0)
为了解决并发错误,至少有一个访问必须是写入/修改错误。
注意不要将getter误认为变量。访问时,它们可能具有您不知道的含义。