有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