有Singleton模式的各種版本,有些是線程安全的介紹線程安全,有些則不是:
你可以通過文章喬恩Skeet在這些模式。
http://csharpindepth.com/articles/general/singleton.aspx
線程安全是很重要的,以確保您有正確的價值觀玩。
在以下示例中兩個線程調用,這意味着通過由5乘以它,如果它是5
現在可以存在主線程進入而x中如果塊的場景來設置值x到25的方法是5,開始執行doSomething方法,然後是SecondThread,在x仍然是5時進入if循環。然後,主線程A將修改x到25,然後SecondThread將其修改爲125
所以在這裏我們需要某種形式的同步,使不超過一個線程可以同時修改X。
private int x = 5;
private void dosomething()
{
}
private void multXby5if5() // Should make x =25, by multiplying 5 if it was 5, finally x should be 25
{
if (x == 5) // State A: SecondThread reaches here while x is still 5
{
dosomething(); //State A : Main thread reaches here
x = x*5; // State B: Then Main Thread comes and makes x =25, then later SecondThread will come make x*5=25*5=125,
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread tr = new Thread(multXby5if5);
tr.Name = "SecondThread";
multXby5if5();
tr.Start();
}
這是不是最好的例子,但我希望它會幫助你。
這是一個* *的實施是安全或不安全的 - 而不是「單身一般」。 – 2013-02-18 12:38:53
也許是最好的解釋:落實以喬恩斯基特在C#Singleton模式](http://csharpindepth.com/articles/general/singleton.aspx) – Habib 2013-02-18 12:39:54
'「?爲什麼開發商關心線程安全」' - 因爲他們喜歡他們的代碼,就像他們喜歡thAsynchronous.eir的妙語。 – David 2013-02-18 12:39:56