我正在用C#构建一个多线程缓存,它将保存一系列Car对象:
public static IList<Car> Cars {get; private set;}
我想知道在没有锁定的情况下更改线程中的引用是否安全?例如:private static void Loop()
{
while (true)
{
Cars = GetFreshListFromServer();
Thread.Sleep(SomeInterval);
}
}
基本上就是看给Cars分配一个新引用是否具有原子性,我猜。
如果没有,我显然必须为我的汽车使用私有字段,并在获取和设置周围进行锁定。
static
列表容易受到变异问题的影响;不要在锁之外改变它! - Marc Gravell