Я хочу закодировать кеш с автоматической очисткой, который в реальном сценарии очищает все элементы в кеше один раз за много часов, но имеет постоянные чтения. Поскольку очистка и чтение происходит из разных потоков, эта структура данных должна быть потокобезопасной. Хотите избежать блокировок, если это возможно, с этой постоянной прочитанной, но очень редко пишите. С _cache, отмеченным как volatile, и CleartheCache() является только назначением (атомарным), это threadsafe?Можно ли использовать ключевое слово volatile для создания безопасного кэша кеша в потоке?
public class AutoClearCache
{
volatile IDictionary<Key,Resource> _cache = new Dictionary<Key, Resource>();
public AutoClearCache(TimeSpan autocleanInterval)
{
var observable = Observable.Interval(autocleanInterval);
observable.Subscribe((r) => CleartheCache());
}
private void CleartheCache()
{
_cache = new Dictionary<Key, Resource>();
}
Ваш вопрос слишком широк, поскольку он охватывает два языка (Java и C#), в которых 'volatile' означает существенно разные вещи. Поскольку вы, по-видимому, больше заинтересованы в C#, удалите Java-тег. –