Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Реализация синглтона с многократным освобождением ресурсов

#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() { ... } }

Комментариев нет:

Отправить комментарий