У меня есть класс, который я хочу использовать в качестве одиночного, создавая его статический экземпляр.Естественно, я также хочу, чтобы это было потокобезопасным.
Предположим, я не делюсь никакими личными данными.Но если я не ошибаюсь, все равно остается проблема, заключающаяся в том, что при вызове метода экземпляра статического объекта переменные внутри методов разделяются между потоками и могут привести к непредсказуемым результатам.
Однако при вызове реальной статикиметод, новый фрейм стека создается, так что он в любом случае безопасен для потоков (сам по себе).Опять же, если я не ошибаюсь.
Будет ли этот шаблон для синглтона быть потокобезопасным?
class Singleton
{
public object SomeMethod(object arg) {
return Singleton.SomeMethodImpl(arg);
}
private static object SomeMethodImpl(object arg) {
// is in unique stack frame?
object Result;
...
return Result;
}
}
Если вам интересно, почему я не просто создаю статический класс вПервое место - мне нужно иметь синглтон, основанный на интерфейсе и имеющий различные реализации, как часть шаблона стратегии.Это не работает для статических классов.