没有线程会修改变量。他们都在读书。这安全吗?
问问题
1053 次
2 回答
6
这取决于您的线程正在共享哪些资源。考虑以下示例:
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 是只读的,但其内部不是线程安全的,那么简单地让多个线程读取它是不安全的。
于 2013-03-24T05:28:39.457 回答
1
为了使并发错误浮出水面,至少一个访问必须是写入/修改访问。
注意不要将 getter 误认为是变量。它们可能会在访问时产生您不知道的影响。
于 2013-03-24T05:15:46.087 回答