c# .NET 高级编程 高并发必备技巧 - 锁
时间:2023-08-21 04:52:41来源:博客园

锁 最为常见的应用就是 高并发的情况下,库存的控制。本次只做简单的单机锁介绍。直接看代码:每请求一次库存-1. 假如库存1000,在1000个人请求之后,库存将变为0。

public int Reduce0()    {            int r = 0;            string key = "stock";            string stock = Rds.cli.Get(key);            int.TryParse(stock, out r);            if (r > 0)            {                r--;                Rds.cli.Set(key, r);            }            else            {                throw new Exception("库存用尽!");            }            return r;    }

本次测试使用Jmeter进行测试。先初始化库存为1000。

Jmeter 设置如下,一个线程请求1000次,再去查看库存刚好为0,没有任何问题:


(资料图)

调整一下测试参数,5个人同时请求,各请求200次。再去查看库存

发现请求后,还有279的库存。明明请求了1000次。但是还有279的库存,明显不对。

造成次问题的原因很简单,就是在库存还没完全减的情况下,有另外一个、或多个线程同时发出了请求,而库存只减少了1

只要还有库存,就可以继续请求,到了库存完全为0的时候,已经超过1000个人进行了请求。与实际库存不符合。

为了解决这个问题。我们简单调整一下代码:

private static object lck = new object();        [HttpGet]        public  int Reduce1()        {            lock(lck)            {                int r = 0;                string key = "stock";                string stock = Rds.cli.Get(key);                r = int.Parse(stock);                if (r > 0)                {                    r--;                    Rds.cli.Set(key, r);                }                else                {                    throw new Exception("库存用尽!");                }                return r;            }        }

声明一个静态变量,然后再方法体内 使用lock。调整代码后,再次进行测试:

发现 请求1000次后,库存为0。调整测试参数 100人*10次。测试结果依然为0。

到此为止,问题解决。

但是,实际应用场景中,高并发的应用,都会多机分布式部署。分布式部署要怎么解决?大家思考一下。

标签:

最新
  • c# .NET 高级编程 高并发必备技巧 - 锁

    锁最为常见的应用就是高并发的情况下,库存的控制。本次只做简单的单机

  • 西部陆海新通道桂东铁海联运班列运量突破300万吨

    本报贺州讯(记者岑琴通讯员宋斯丽实习生余诗琪)8月14日上午,运载44

  • “20龙湖04”跌超22% 触发盘中临停

    “20龙湖04”跌超22%,盘中临时停牌。截至发稿,“20龙湖04”跌22 54%

  • 河南小学生招生服务平台(好看的头发怎么扎小学生)

    1、可爱型的我觉得就是那种后双辫不要扎的底了要高一点翘一点最好末端

  • 京东健康年度活跃用户净增3730万

    截至今年6月30日,京东健康年度活跃用户数量近1 69亿,同比净增3730万

  • 身上皮肤出现红色块,是什么病 具体是啥状况呢

    今天“【身上皮肤出现红色块,是什么病具体是啥状况呢】”在全网搜索度

  • 浙江台州99元睡大厅酒店被罚10万,市监局:虚假宣传

    据信用中国网站近日公布的信息,浙江省台州市市场监督管理局已对“台州

  • MSRC 2023全球最具价值安全精英榜出炉,360强势登榜!

    MSRC2023全球最具价值安全精英榜出炉,360强势登榜!

  • 原油交易提醒:空头狂欢!经济下行风险担忧盖过库存下降,油价跌逾3%创近两周新低

    8月17日(周四)亚市盘初,美原油小幅下探,一度创近两周新低至美元 桶

  • 华为Mate X3兼顾十项全能,专利引领行业,折叠屏不以“薄”论英雄

    不用多问,想必大家都意识到折叠屏市场越来越火了。眼下,各大品牌都相

  • 展示上海形象,香港同胞讲上海故事短视频启动

    为向香港同胞展现新时代上海形象,昨天(8月13日),“上海v印象”香港

  • 定鼎大道孟津至吉利段修复工程预计9月底前完工

    近日,有网友在洛阳网《百姓呼声》频道发帖称:定鼎大道孟津至吉利段正

  • 辐射76怎么在核子私酿在演奏乐器

    《辐射76》是一款末日废土风格的角色扮演游戏。核子私酿是游戏中的一个

  • 19岁少女录和狗发生性关系视频,警方:虐狗行为十年监禁

    最近出现了令人震惊的消息:19岁的女孩丹尼斯弗雷泽因涉嫌与他的狗发生

  • 上课铃声及语音提示 上课铃声及语音提示

    0471房产来为大家解答以上的问题。上课铃声及语音提示,上课铃声及语音

  • 湖北赤壁打造国内首个野外智能无人系统测试基地

    (胡传林但唐静)“基地指挥大楼已投用,目前正加紧修建13 7公里长的测试

  • 旅游
    • 陕西组建工作专班 全链条打击犯罪

    • 一类卡可以降级为二类卡吗?一类卡降为二类能恢复吗?

    • 中海达是国企还是央企?中海达为什么研发费用那么高?-天天百事通

    • Redmi 平板跌破 800 元,90Hz 高刷 2K 屏