Я знаю, что есть много способов реализовать одноэлементный потокобезопасный шаблон, например (блокировка двойной проверки, статический метод только для чтения, метод блокировки), но я только что попробовал приведенный ниже код
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());
}
}
когда я вижу вывод этой программы, я вижу только один созданный объект (из-за того же хеш-кода)
как доказать, что этот код не является потокобезопасным?
EDIT
удаление статического конструктора, что вызывает путаницу