#c_sharp #шаблоны_проектирования
Как правильно реализовать многопоточный синглтон с возможностью в любой момент и из любой нити освободить все занятые ресурсы и так чтобы при следующем запросе они снова лениво разворачивались.
Ответы
Ответ 1
А в чём проблема? Ну окружите весь доступ мьютексом. Поскольку вам нужна логика реинициализации, простое решение с Lazy-свойствами не проходит. public sealed class Singleton { // классическая реализация из статьи Jon Skeet'а // http://csharpindepth.com/articles/general/singleton.aspx private static readonly Lazy lazy = new Lazy (() => new Singleton()); public static Singleton Instance { get { return lazy.Value; } } private Singleton() { } /////////////////// ленивые свойства /////////////////// object accessMutex = new object(); string lazyProperty; public string LazyProperty { get { lock (accessMutex) return lazyProperty ?? (lazyProperty = CreateLazyProperty()); } } public void Reset() { lock (accessMutex) { lazyProperty = null; // обнулите остальные свойства, освободите IDisposable-ресурсы } } string CreateLazyProperty() { ... } }
Комментариев нет:
Отправить комментарий