假设我有充当数据缓存的单例类。多个线程将从缓存中读取,单个线程会定期刷新它。它看起来像这样:
public sealed class DataStore
{
public static DataStore Instance { get { return _instance; } }
public Dictionary<Foo, Bar> FooBar { get; private set; }
static DataStore() { }
private DataStore() { }
public void Refresh() {
FooBar = GetFooBarFromDB();
}
private static readonly DataStore _instance = new DataStore();
}
我的问题本质上是,Refresh()
当其他线程可能正在访问时是否安全FooBar
?我需要使用锁,还是我的获取和设置操作是原子的?我是否需要明确声明volatile
字段来备份我的属性?
PS,如果有人能为这个问题想出一个更具描述性的标题,我会很高兴地欢迎它。
编辑:修复了我的示例以更正明显的非原子代码。