public abstract class Comparer<T> : IComparer, IComparer<T>
{
static Comparer<T> defaultComparer;
public static Comparer<T> Default {
get {
Comparer<T> comparer = defaultComparer;
if (comparer == null) {
comparer = CreateComparer();
defaultComparer = comparer;
}
return comparer;
}
}
首先,默认属性线程安全吗?以下语句的效果是不是可能
comparer = CreateComparer();
除了创建线程之外,线程可能看不到?那么,是否构造了多个 Comparer 实例?
Microsoft 这样做是为了用创建多个对象的成本来交换同步成本吗?
其次,为什么首先将 defaultComparer 首先分配给比较器变量……然后再进行交换?为什么Comparer comparer = defaultComparer?