当前位置: 首页 > news >正文

深圳好点的网站建设公司一天一元网站建设

深圳好点的网站建设公司,一天一元网站建设,在线html编辑器,网站制作培训机构我们知道通过lock一个固定静态object给代码段加同步锁,可以让多个线程的同时调用以同步执行,因此可以利用字典来给不同参数分配不同的静态对象,方法中不同的参数调用锁住各自不同的静态对象即可实现不同参数不加锁,相同参数才加锁…

我们知道通过lock一个固定静态object给代码段加同步锁,可以让多个线程的同时调用以同步执行,因此可以利用字典来给不同参数分配不同的静态对象,方法中不同的参数调用锁住各自不同的静态对象即可实现不同参数不加锁,相同参数才加锁的需求,而多线程更新操作的字典需要用到线程安全的ConcurrentDictionary防止争用,因此这里的静态加锁对象字典类型为ConcurrentDictionary<string, object>。

比如场景:在数据库某表没有唯一约束的情况下,有可能前端请求和程序定时服务同时执行写入操作,这时写入操作在不同的线程中执行,虽然写入之前作了判断记录是否已存在的操作,但可能两个线程同时执行都判断了记录不存在,因此都执行了写入操作,就造成了记录重复的可能。

写一个调用管理类“MultiInvokeManager”,通过该类来控制这种相同参数同时调用的可能性

/// <summary>
/// 多线程调用方法控制类
/// </summary>
public static class MultiInvokeManager
{//参数调用匹配加锁对象字典private static readonly ConcurrentDictionary<string, object> _lockMap = new ConcurrentDictionary<string, object>();           /// <summary>/// 根据调用参数(比如方法参数中唯一的订单号)对应的“key”,排除相同参数的“action”操作同时被执行/// </summary>/// <param name="key">相同参数匹配相同的key(比如唯一的订单号),以便相同参数不可同时调用</param>/// <param name="action">通过key是否相同决定是否需要限制同步执行的操作</param>public static void SyncInvokeForSameArgs(string key, Action action){object obj = _lockMap.GetOrAdd(key, new object());lock (obj){action();}}/// <summary>/// 控制的操作执行后,在适当的时机调用该方法释放字典中的对象,以便垃圾回收,防止累积占用内存/// </summary>/// <param name="key"></param>public static void ReleaseLockObject(string key){_lockMap.TryRemove(key, out _);}
}

1. 程序定时服务中调用:

MultiInvokeManager.SyncInvokeForSameArgs(tradeNo, () =>UpdateUserMemberStatus(userId, tradeNo, transactionId, payAmount).Wait()
);
MultiInvokeManager.ReleaseLockObject(tradeNo);

2. 前端请求方法中调用:

MultiInvokeManager.SyncInvokeForSameArgs(tradeNo, () =>UpdateMemberStatus(tradeNo, transactionId, payAmount).Wait()
);
MultiInvokeManager.ReleaseLockObject(tradeNo);

 以上两处调用中“UpdateUserMemberStatus”和“UpdateMemberStatus”方法,执行的都是判断“tradeNo”在原来某历史表中是否已经存在,不存在则Insert历史表并Update关联主表的相同操作,因此利用上面管理类“MultiInvokeManager”来控制防止相同参数的写入可能同时发生的可能(同时保持不同参数的写入依旧可以在不同线程中同时进行)

http://www.yayakq.cn/news/81349/

相关文章:

  • 建站系统下载成都装修公司口碑最好的是哪家
  • 濮阳建设企业网站公司h5 移动 网站 开发
  • wordpress产品页插件seo是做什么的
  • 安徽省芜湖建设定额网站百度推广是必须先做网站吗
  • 网站建设网站服务流程高级程序员培训
  • 屏山县建设招标网站网页设计学校网站
  • 标准网站建设哪家便宜孟坤WordPress博客主题模板
  • 请别人做网站会不会被盗长沙公司排名
  • 做网站的的报价网站广告怎么做
  • 新民网站建设价格咨询网站seo基本流程
  • 青岛seo做的好的网站北京建设部网站职称
  • 网做网站南充网站建设设计略奥
  • wordpress建站被黑苏州免费推广的网站
  • 顺义城区网站建设百度网站排名seo
  • 访问中国建设银行网站喜欢做网站
  • 高明专业网站建设报价新手这样开办公司
  • 建设银行租房平台网站6佛山营销型网站建设公司
  • 凯盛建设公司网站延吉 网站开发
  • 设计网站免费下载网站特效 素材
  • 网站建设什么公司好宝安中心医院口腔科电话
  • 做招聘网站的怎么引流求职者做网站需要一些什么东西
  • 网站后台 源码wordpress插件收录
  • 大连网站开发网站推广优化是什么意思
  • 制作网站的走马灯怎么做建设网站的目的和功能定位
  • wordpress网站统计插件网站如何留住客户
  • 做网站申请哪类商标网络工程师职业分析
  • 营销网站建设哪里便宜建e网登录
  • 四川网站建设设计公司网站开发顶岗实习报告
  • 泉州专业做网站网站宣传平台
  • 成都网站建设有名的商业网站开发设计报告