Пример #1
0
        static void Main(string[] args)
        {
            ChocolateBoiler chocolateBoiler  = ChocolateBoiler.GetInstance();
            ChocolateBoiler chocolateBoiler2 = ChocolateBoiler.GetInstance();

            Console.WriteLine("ChocolateBoiler:" + chocolateBoiler);
            Console.WriteLine("ChocolateBoiler2:" + chocolateBoiler2);

            chocolateBoiler.Fill();

            Console.WriteLine("\nFILL:");
            Console.WriteLine("ChocolateBoiler:" + chocolateBoiler);
            Console.WriteLine("ChocolateBoiler2:" + chocolateBoiler2);

            chocolateBoiler2.Boil();

            Console.WriteLine("\nBOIL:");
            Console.WriteLine("ChocolateBoiler:" + chocolateBoiler);
            Console.WriteLine("ChocolateBoiler2:" + chocolateBoiler2);

            chocolateBoiler.Drain();

            Console.WriteLine("\nDRAIN:");
            Console.WriteLine("ChocolateBoiler:" + chocolateBoiler);
            Console.WriteLine("ChocolateBoiler2:" + chocolateBoiler2);
        }
Пример #2
0
        static void Main(string[] args)
        {
            ChocolateBoiler test = ChocolateBoiler.GetBoiler();

            test.Fill();
            Task.Run(() => test.Boil());
            Thread.Sleep(2000);
            test.Boil();
            Console.WriteLine();
        }
Пример #3
0
        static void Main(string[] args)
        {
            ChocolateBoiler instance = ChocolateBoiler.GetInstance("First Instance");

            Console.WriteLine(instance.GetName());

            instance = ChocolateBoiler.GetInstance("Second Instance");
            Console.WriteLine(instance.GetName());

            Console.ReadKey();
        }
 public static ChocolateBoiler GetInstance()
 {
     lock (synchronized)
     {
         if (instance == null)
         {
             instance = new ChocolateBoiler();
         }
         return instance;
     }
 }
Пример #5
0
 public static ChocolateBoiler GetInstance(string name)
 {
     lock (_lockObject)
     {
         if (_instance != null)
         {
             return(_instance);
         }
         _instance = new ChocolateBoiler(name);
         return(_instance);
     }
 }
Пример #6
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var factory  = ChocolateBoiler.GetInstance();
            var factory2 = ChocolateBoiler.GetInstance();

            factory.Boil();

            factory.Drain();

            factory.Fill();
        }
Пример #7
0
        static void Main(string[] args)
        {
            ChocolateBoiler boiler = ChocolateBoiler.GetInstance();

            var tasks = new List <Task>();

            for (int i = 0; i < 50; i++)
            {
                tasks.Add(Task.Factory.StartNew(() => boiler.Fill()));
                tasks.Add(Task.Factory.StartNew(() => boiler.Drain()));
                tasks.Add(Task.Factory.StartNew(() => boiler.Boil()));
            }
            Task.WaitAll(tasks.ToArray());
        }
Пример #8
0
        public ChocolateBoiler GetInstance()
        {
            // Если это условие не выполнится, то никакие блокировки не нужны, поскольку
            // экземпляр синглтона уже создан
            if (instance is null)
            {
                // Но поскольку никаких блокировок сделано не было, есть вероятность,
                // что произошло переключение контекста и другой поток успел создать
                // экземпляр синглтона, поэтому захватываем блокировку и проверяем
                // наличие экземпляра еще раз
                lock (instance)
                {
                    if (instance is null)
                    {
                        // Да, экземпляр таки не создался, давайте-ка создадим его
                        instance = new ChocolateBoiler();
                    }
                }
            }

            return(instance);
        }
Пример #9
0
        static void Main(string[] args)
        {
            ChocolateBoiler boiler = ChocolateBoiler.getInstance();

            boiler.fill();
        }
Пример #10
0
        /// <summary>
        /// Статический конструтор нагревателя. Нужен для заполнения переменной с бойлером (синхронизация потоков) и прочих инициализаций.
        /// </summary>

        static ChocolateBoiler()
        {
            instance = new ChocolateBoiler();
        }