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;
            }
        }

首先,Default属性线程安全吗?
以下语句的效果是否可能
comparer = CreateComparer();

可能对创建线程以外的线程不可见?
那么,构造了多个Comparer实例吗?

Microsoft是否这样做是为了将同步成本与
创建多个对象?

第二,为什么先将defaultComparer分配给比较器变量...然后再交换给它?
为什么比较器比较器= defaultComparer?

最佳答案

是的。确实确实创建了多个比较器,对defaultComparer进行了多次分配。没问题,它们都是一样的。垃圾收集器负责额外的工作。并且CLR为对象引用提供的原子分配保证可以确保不会错误地读取静态。

关于.net - CLI库代码Thread Safe中的Comparer类是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5333138/

10-10 06:45