多线程读取静态对象是否安全?

时间:2013-03-24 05:08:59

标签: c# thread-safety

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

2 个答案:

答案 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误认为变量。访问时,它们可能具有您不知道的含义。

相关问题