Страницы

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

пятница, 28 июня 2019 г.

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

Как правильно реализовать многопоточный синглтон с возможностью в любой момент и из любой нити освободить все занятые ресурсы и так чтобы при следующем запросе они снова лениво разворачивались.


Ответ

А в чём проблема? Ну окружите весь доступ мьютексом. Поскольку вам нужна логика реинициализации, простое решение с 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() { ... } }

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

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