Closed spadark closed 7 years ago
if (_cache.Get(key) != null) { return false;//已被别人锁住,没有取得锁 } else { _cache.Store(StoreMode.Set, key, new object(), new TimeSpan(0, 0, 10));//创建锁 return true;//取得锁 }
经单元测试发现, StoreMode 不应该使用Set, 这样会导致高并发下, 多个线程都重复获取到锁. 应该使用Add模式, 这样memcache会判断key是否存在.
if (_cache.Store(StoreMode.Add, key, new object(), new TimeSpan(0, 0, 10))) { return true;//取得锁 } else { return false;//已被别人锁住,没有取得锁 }
方便Pull Request到Developer分支里面吗?加入到Contributor里面来。
已经修改,感谢! https://github.com/JeffreySu/WeiXinMPSDK/pull/529/commits/d927b5e8730fab0608f6b2a2db2d56bedb78adc9
问题描述
if (_cache.Get(key) != null) { return false;//已被别人锁住,没有取得锁 } else { _cache.Store(StoreMode.Set, key, new object(), new TimeSpan(0, 0, 10));//创建锁 return true;//取得锁 }
经单元测试发现, StoreMode 不应该使用Set, 这样会导致高并发下, 多个线程都重复获取到锁. 应该使用Add模式, 这样memcache会判断key是否存在.
if (_cache.Store(StoreMode.Add, key, new object(), new TimeSpan(0, 0, 10))) { return true;//取得锁 } else { return false;//已被别人锁住,没有取得锁 }
发现问题的模块
模块对应的.net版本
开发环境
缓存环境