码迷,mamicode.com
首页 > 其他好文 > 详细

高并发场景下秒杀项目静态锁的使用疑问

时间:2018-01-23 01:06:58      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:aos   使用   流量   有一个   obj   thinkpad   int   iphone   static   

题:高并发场景下秒杀项目静态锁的使用疑问
场景:我们有一个秒杀平台,可以提供所有接入公司创建的秒杀活动,简单描述如下:
1、秒杀10袋洗衣粉,开始时间12:00(项目ID:A001)
2、秒杀iPhone5,开始时间12:00(项目ID:A002)
3、秒杀水杯,开始时间12:00(项目ID:A003)
... ...(项目ID:A004-A009)
10、秒杀ThinkPad,开始时间12:00(项目ID:A010)

例如上面,同时有十个秒杀,都是12:00整开始,每个秒杀之间没有任何关系。

按照我之前的有限的非高并发场景经验,比较好处理,在一个方法中使用全局静态锁,保证库存扣减的安全性。

private static object myLock=new object();
public int MiaoShaFunc()
{
  if(项目X库存>0)
  {
    lock锁住(myLock)
    {
      if(项目X库存>0)
      {
        //TODO:一系列扣减操作
      }
    }
  }
}


但是,现在的问题是,当高并发场景下,每一个项目都可能有海量的用户在进行秒杀操作,而十个秒杀项目同时进行,当秒杀项目A001锁住myLock时,其他的A002-A010调用该方法的项目都会收到影响,从而导致大面积的等候。

请问,这种场景该怎么优化?是不是存在某种方案,可以按一定条件,只锁住一部分流量,例如A001项目的用一个锁,A002用另外一个锁这样的方案?

请高手赐教

高并发场景下秒杀项目静态锁的使用疑问

标签:aos   使用   流量   有一个   obj   thinkpad   int   iphone   static   

原文地址:https://www.cnblogs.com/dissun/p/8331471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!