最終更新: yamanobori_old 2010年09月21日(火) 11:14:44履歴
デザインパターン入門
デザインパターン入門
// Program.cs using System; namespace chap05 { class Program { static void Main(string[] args) { Console.WriteLine("Start."); Singleton obj1 = Singleton.getInstance(); Singleton obj2 = Singleton.getInstance(); if (obj1 == obj2) { Console.WriteLine("obj1とobj2は同じインスタンスです."); } else { Console.WriteLine("obj1とobj2は同じインスタンスではありません."); } Console.WriteLine("End."); } } } // Singleton.cs using System; namespace chap05 { class Singleton { private static Singleton sigleton = new Singleton(); private Singleton() { Console.WriteLine("インスタンスを生成しました."); } public static Singleton getInstance() { return sigleton; } } }
// Triple.cs namespace chap05 { class Triple { private static Triple[] insts = new Triple[] { new Triple(), new Triple(), new Triple() }; private Triple() { } public static Triple getInstance(int id) { return insts[id]; } } }
- 条件文がスレッドセーフではない!!
// Singleton.cs using System; namespace chap05 { class Singleton { private static Singleton sigleton; private Singleton() { Console.WriteLine("インスタンスを生成しました."); } public static Singleton getInstance() { if (sigleton == null) { sigleton = new Singleton(); } return sigleton; } } }
- スレッドセーフ版
using System; namespace chap05 { class Singleton { private static Singleton sigleton; private static object criticalsection = new object(); private Singleton() { Console.WriteLine("インスタンスを生成しました."); } public static Singleton getInstance() { lock (criticalsection) { if (sigleton == null) { sigleton = new Singleton(); } return sigleton; } } } }
デザインパターン入門
コメントをかく