以单例模式锁定(this)

时间:2016-07-19 16:09:20

标签: c# singleton

在单例懒惰的多线程实现中使用lock(this)而不是lock(lockObject)良好的实现吗?

示例:

    public class MedicineHelper
    {
        private static MedicineHelper medicineHelper;
        private MedicineHelper()
        {
        }

        public static MedicineHelper GetInstance()
        {
            if (medicineHelper == null)
            {
                lock (this)
                {
                    if (medicineHelper == null) medicineHelper = new MedicineHelper();
                }
            }
            return medicineHelper;
        }
    }

经典模式需要像这样的锁专用对象:

    public class MedicineHelper
    {
        private static MedicineHelper medicineHelper;
        private static Object lockObject = new Object();
        private MedicineHelper()
        {
        }

        public static MedicineHelper GetInstance()
        {
            if (medicineHelper == null)
            {
                lock (LockObject)
                {
                    if (medicineHelper == null) medicineHelper = new MedicineHelper();
                }
            }
            return medicineHelper;
        }
    }

1 个答案:

答案 0 :(得分:1)

这不是一个好的实施,因为你无法做到。 "这"静态方法无法使用。