我知道有很多方法可以實現諸如(雙重檢查鎖定模式,靜態只讀方法,鎖定法)一個線程安全的Singleton模式,但我只是想下面的代碼Singleton實例
static void Main(string[] args)
{
for (int i = 0; i <= 100; i++)
{
Thread t = new Thread(new ParameterizedThreadStart(doSome));
t.Start(null);
}
Console.ReadLine();
}
private static void doSome(object obj)
{
MyReadOnly obj1 = MyReadOnly.getInstance;
Console.WriteLine(obj1.GetHashCode().ToString());
}
class MyReadOnly
{
private static MyReadOnly instance = new MyReadOnly();
int counter = 0;
// static MyReadOnly()
// {
// } treat is as commented code.
public static MyReadOnly getInstance { get { return instance; } }
private MyReadOnly()
{
Console.WriteLine((++counter).ToString());
}
}
當我看到輸出這個程序,我看到只是單個對象創建(因爲相同的哈希碼)
如何證明此代碼不是線程安全的?
編輯
去除靜態構造函數這會導致一些混亂
你沒有做任何concurent訪問,所以沒有問題 – 2010-10-29 09:22:44