Tag: 双重检查锁定

测试条件然后锁定然后重新测试条件是好的

可能重复: 在.net中双重检查锁定 编辑:许多编辑澄清这个问题不是关于单身人士 我发现自己编写的代码如下: if(resourceOnDiskNeedsUpdating) { lock(lockObject) { if(resourceOnDiskNeedsUpdating) // has a previous thread already done this? UpdateResourceOnDisk(); } } return LoadResourceFromDisk(); UpdateResource()是一个缓慢的操作。 这种模式有意义吗? 还有更好的选择吗?

如何显示带有Dictionary的TryGetValue的双重检查锁模式不是线程安全的

最近我看到一些在Dictionary上使用双重检查锁定模式的C#项目。 像这样的东西: private static readonly object _lock = new object(); private static volatile IDictionary _cache = new Dictionary(); public static object Create(string key) { object val; if (!_cache.TryGetValue(key, out val)) { lock (_lock) { if (!_cache.TryGetValue(key, out val)) { val = new object(); // factory construction based on key here. _cache.Add(key, val); } } } […]