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); }
static void Main(string[] args) { ChocolateBoiler test = ChocolateBoiler.GetBoiler(); test.Fill(); Task.Run(() => test.Boil()); Thread.Sleep(2000); test.Boil(); Console.WriteLine(); }
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; } }
public static ChocolateBoiler GetInstance(string name) { lock (_lockObject) { if (_instance != null) { return(_instance); } _instance = new ChocolateBoiler(name); return(_instance); } }
static void Main(string[] args) { Console.WriteLine("Hello World!"); var factory = ChocolateBoiler.GetInstance(); var factory2 = ChocolateBoiler.GetInstance(); factory.Boil(); factory.Drain(); factory.Fill(); }
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()); }
public ChocolateBoiler GetInstance() { // Если это условие не выполнится, то никакие блокировки не нужны, поскольку // экземпляр синглтона уже создан if (instance is null) { // Но поскольку никаких блокировок сделано не было, есть вероятность, // что произошло переключение контекста и другой поток успел создать // экземпляр синглтона, поэтому захватываем блокировку и проверяем // наличие экземпляра еще раз lock (instance) { if (instance is null) { // Да, экземпляр таки не создался, давайте-ка создадим его instance = new ChocolateBoiler(); } } } return(instance); }
static void Main(string[] args) { ChocolateBoiler boiler = ChocolateBoiler.getInstance(); boiler.fill(); }
/// <summary> /// Статический конструтор нагревателя. Нужен для заполнения переменной с бойлером (синхронизация потоков) и прочих инициализаций. /// </summary> static ChocolateBoiler() { instance = new ChocolateBoiler(); }