実際のシナリオではキャッシュ内のすべてのアイテムを何時間も消去しますが、一定の読み込みヒットを持つ自動クリアキャッシュを作成したいと思います。クリアと読み取りは異なるスレッドから行われるため、このデータ構造はスレッドセーフである必要があります。できるだけロックを避けたいのですが、この一定の読み込みでは非常に書き込みはほとんどありません。 _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>();
}
あなたの質問は、「volatile」が著しく異なることを意味する2つの言語(JavaとC#)をカバーしているため、広すぎます。明らかにC#に興味があるので、Javaタグを削除してください。 –