C# 线程浅谈(三)

这篇讲线程锁 lock得概念

什么是锁 为什么用锁  

做个栗子

俩个线程同时访问一个int对象

一个线程 ++ 一个线程-- 都1W次

那么这个数 不管怎么样 最后都是0

  class TaskDom
    {
        int count = 0;
   
        public void Start()
        {
           Task t1= Task.Run(Task01);
            Task t2=Task.Run(Task02);
            t1.Wait();
            t2.Wait();
            Console.WriteLine("count: "+count);
        }
 
        private void Task02()
        {
            for (int i = 0; i < 10000; i++)
            {
               
                    count++;
               
              
            }
        }

        private void Task01()
        {
            for (int i = 0; i < 10000; i++)
            {
              
                    count--;
               
              
            }
        }
    }

但是结果是 而且每一次都不一样  这时候就需要锁LOCK来进行处理

怎么加锁那

首先加一个  object obj = new object();对象

然后在需要加锁得地方加上

lock (obj)
{
//do
};

栗子

   class TaskDom
    {
        int count = 0;
        object obj = new object();
        public void Start()
        {
           Task t1= Task.Run(Task01);
            Task t2=Task.Run(Task02);
            t1.Wait();
            t2.Wait();
            Console.WriteLine("count: "+count);
        }
 
        private void Task02()
        {
            for (int i = 0; i < 10000; i++)
            {
                lock (obj)
                {
                    count++;
                }

            }
        }

        private void Task01()
        {
            for (int i = 0; i < 10000; i++)
            {
                lock (obj)
                {
                    count--;
                }

            }
        }
    }

运行结果

OK 写完~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小慧哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值