Я знаю, что есть много способов реализации поточно безопасный шаблон одноэлементный как (Double Check Locking, статический чтения метод, блокировка метод), но я просто попытался ниже кодSingleton Instance
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
удаление статического конструктора, который вызывает некоторую путаницу
Вы не делаете никакого взаимного доступа, чтобы не было проблем –