示例#1
0
        /// <summary>
        /// test
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();

            if (s1 == s2)
            {
                System.Console.WriteLine("s1和s2是同一个实例。");
            }
            else
            {
                System.Console.WriteLine("s1和s2不是同一个实例。");
            }

            Singleton2 s3 = Singleton2.getInstance();
            Singleton2 s4 = Singleton2.getInstance();

            if (s3 == s4)
            {
                System.Console.WriteLine("s3和s4是同一个实例。");
            }
            else
            {
                System.Console.WriteLine("s3和s4不是同一个实例。");
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            Console.WriteLine($"Singleton");
            Enumerable.Range(1, 5).Select(
                i => Task.Run(() =>
            {
                Console.WriteLine($"{Singleton.GetInstance().GetHashCode()}");
            })
                ).ToList();
            //Enumerable.Range(1, 100).AsParallel().ForAll(i => { Console.WriteLine(i); });
            Console.WriteLine($"Singleton1");
            Enumerable.Range(1, 5).Select(i => Task.Run(() =>
            {
                Console.WriteLine($"{Singleton1.GetInstance().GetHashCode()}");
            })).ToList();

            Console.WriteLine($"Singleton2");
            Enumerable.Range(1, 5).Select(i => Task.Run(() =>
            {
                Console.WriteLine($"{Singleton2.GetInstance().GetHashCode()}");
            })).ToList();

            Console.WriteLine($"Singleton3");
            var ss = Enumerable.Range(1, 5).Select(i => Task.Run(() =>
            {
                Console.WriteLine($"{Singleton3.GetInstance().GetHashCode()}");
            })).ToList();

            Console.ReadLine();
        }
示例#3
0
        static void punto3()
        {
            bool testInstance = true;

            Singleton1 test11 = Singleton1.Instance;
            Singleton1 test12 = Singleton1.Instance;

            testInstance = (test11 == test12) ? true : false;
            Console.WriteLine("Instancia 1");
            Console.WriteLine("Las Intancias con iguales: " + testInstance);

            Singleton2 test21 = Singleton2.Instance;
            Singleton2 test22 = Singleton2.Instance;

            testInstance = (test21 == test22) ? true : false;
            Console.WriteLine("Instancia 2");
            Console.WriteLine("Las Intancias con iguales: " + testInstance);

            /* LA OPCIÓN TRES PRODUCE UN DESBORDAMIENTO Y ROMPE INMEDIATAMENTE*/
            //Singleton3 test31 = Singleton3.Instance;
            //Singleton3 test32 = Singleton3.Instance;
            //testInstance = (test31 == test32) ? true : false;
            //Console.WriteLine("Instancia 3");
            //Console.WriteLine("Las Intancias con iguales: " + testInstance);

            Singleton4 test41 = Singleton4.Instance;
            Singleton4 test42 = Singleton4.Instance;

            testInstance = (test41 == test42) ? true : false;
            Console.WriteLine("Instancia 4");
            Console.WriteLine("Las Intancias con iguales: " + testInstance);
        }
示例#4
0
        protected override void RealTestOutPut()
        {
            println(Singleton1.GetInstance().ToString());
            println(Singleton2.GetInstance().ToString());

            println(Singleton1.GetInstance().ToString());
            println(Singleton2.GetInstance().ToString());
        }
 //3.提供一个获取实例的方法,用public static修饰
 public static Singleton2 getInstance()
 {
     if (instance == null)
     {
         instance = new Singleton2();
     }
     return(instance);
 }
 public static Singleton2 GetSingleton()
 {
     if (_instance == null)
     {
         _instance = new Singleton2();
     }
     return(_instance);
 }
示例#7
0
        public void TestSingleton2()
        {
            var instance1 = Singleton2.GetInstance();

            Assert.IsNotNull(instance1);
            var instance2 = Singleton2.GetInstance();

            Assert.AreSame(instance1, instance2);
        }
示例#8
0
 public static Singleton2 GetSingleton()
 {
     lock (_lock)                //保证线程安全
     {
         if (_singleton == null) //保证为空才创建
         {
             _singleton = new Singleton2();
         }
         return(_singleton);
     }
 }
 // Lock, bir kaynağa aynı anda birden fazla thread'in erişmesini engeller.
 public static Singleton2 getObject()
 {
     if (myObj == null)
     {
         lock (lockObj)
             if (myObj == null)
             {
                 myObj = new Singleton2();
             }
     }
     return(myObj);
 }
 public static Singleton2 GetInstance(string name)
 {
     if (_instance is null)
     {
         lock (_lock)
         {
             if (_instance is null)
             {
                 _instance = new Singleton2(name);
             }
         }
     }
     return(_instance);
 }
示例#11
0
        private static void Demo(string[] args)
        {
            for (int i = 0; i < 1000; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    SinglePerson p = SinglePerson.GetInstance();
                    Singleton1 p1  = Singleton1.GetInstance();
                    Singleton2 s2  = Singleton2.GetInstance();
                });
            }

            Console.ReadKey();
        }
示例#12
0
        // //加锁保证线程安全,每次获取实例时都需要加锁,很费性能
        // public static Singleton2 GetInstance()
        // {
        //     lock (lock_object)
        //     {
        //         if (_instance == null)
        //             _instance = new Singleton2();
        //     }
        //     return _instance;
        // }

        //双重判断,既可保获取同一实例是线程安全的,也不用一直加锁影响性能
        public static Singleton2 GetInstance()
        {
            if (_instance == null)
            {
                lock (lock_object)
                {
                    if (_instance == null)
                    {
                        _instance = new Singleton2();
                    }
                }
            }
            return(_instance);
        }
示例#13
0
        public static Singleton2 CreateInstance()
        {
            if (Instance == null)
            {
                lock (Singleton1_lock)
                { // 保证方法快只要一个进程可进入
                    if (Instance == null)
                    {
                        Instance = new Singleton2();
                    }
                }
            }

            return(Instance);
        }
        private static void RegisterStandard()
        {
            var singleton1 = new Singleton1();
            var singleton2 = new Singleton2();
            var singleton3 = new Singleton3();

            Container.SetResolver <ISingleton1>(() => singleton1);
            Container.SetResolver <ISingleton2>(() => singleton2);
            Container.SetResolver <ISingleton3>(() => singleton3);
            Container.SetResolver <ITransient1, Transient1>();
            Container.SetResolver <ITransient2, Transient2>();
            Container.SetResolver <ITransient3, Transient3>();
            Container.SetResolver <ICombined1, Combined1>();
            Container.SetResolver <ICombined2, Combined2>();
            Container.SetResolver <ICombined3, Combined3>();
        }
示例#15
0
        private async Task Example2()
        {
            var numArr    = Enumerable.Range(0, 5).ToList();
            var singleArr = new Singleton2[numArr.Count];
            var taskList  = new List <Task>();

            foreach (var numitem in numArr)
            {
                var t = Task.Run(() => singleArr[numitem] = Singleton2.Instance);
                taskList.Add(t);
            }

            await Task.WhenAll(taskList.ToArray());

            //Singleton2.Instance = null;

            Console.WriteLine("All done.");
        }
示例#16
0
        public static void TestInstance2Unique()
        {
            for (int i = 0; i < 5; i++)
            {
                int          threadCount = 10000;
                Task <int>[] tasks       = new Task <int> [threadCount];
                for (int j = 0; j < threadCount; j++)
                {
                    tasks[j] = Task.Run <int>(() =>
                    {
                        return(Singleton2.GetInstance().GetHashCode());
                    });
                }
                Task.WaitAll(tasks);

                var codes = tasks.Select(t => t.Result).Distinct();
                Debug.Assert(codes.Count() == 1, $"Singleton2非单例 {codes.Count()}");
            }
        }
示例#17
0
        private void RegisterStandard()
        {
            ISingleton1 singleton1 = new Singleton1();

            this.container[typeof(ISingleton1)] = () => singleton1;
            this.container[typeof(ITransient1)] = () => new Transient1();
            this.container[typeof(ICombined1)]  = () => new Combined1(singleton1, new Transient1());

            ISingleton2 singleton2 = new Singleton2();

            this.container[typeof(ISingleton2)] = () => singleton2;
            this.container[typeof(ITransient2)] = () => new Transient2();
            this.container[typeof(ICombined2)]  = () => new Combined2(singleton2, new Transient2());

            ISingleton3 singleton3 = new Singleton3();

            this.container[typeof(ISingleton3)] = () => singleton3;
            this.container[typeof(ITransient3)] = () => new Transient3();
            this.container[typeof(ICombined3)]  = () => new Combined3(singleton3, new Transient3());
        }
示例#18
0
        public static void TestInstanceProfile()
        {
            int  count = 100000;
            long es    = 0;
            var  watch = Stopwatch.StartNew();

            for (int i = 0; i < count; i++)
            {
                var va = Singleton1.GetInstance();
            }
            watch.Stop();
            es = watch.ElapsedTicks;
            Console.WriteLine($"1 耗时 {es}");

            watch.Restart();
            for (int i = 0; i < count; i++)
            {
                var va = Singleton2.GetInstance();
            }
            watch.Stop();
            es = watch.ElapsedTicks;
            Console.WriteLine($"2 耗时 {es}");

            watch.Restart();
            for (int i = 0; i < count; i++)
            {
                var va = Singleton3.GetInstance();
            }
            watch.Stop();
            es = watch.ElapsedTicks;
            Console.WriteLine($"3 耗时 {es}");

            watch.Restart();
            for (int i = 0; i < count; i++)
            {
                var va = Singleton4.GetInstance();
            }
            watch.Stop();
            es = watch.ElapsedTicks;
            Console.WriteLine($"4 耗时 {es}");
        }
示例#19
0
 public static Singleton2 Instance()
 {
     return(singleton2 ?? (singleton2 = new Singleton2()));
 }
示例#20
0
 static Nested()
 {
     instance = new Singleton2();
 }
 //将实例化放在私有构造函数里面
 private Singleton2()
 {
     instance = new Singleton2();
 }
示例#22
0
 public Singleton2()
 {
     Instance = new Singleton2();
 }
        static void Main(string[] args)
        {
            var uno = Singleton2.GetInstance();

            Console.WriteLine(uno.ToString());
        }