c# Monitor

Monitor主要方法TryEnter、Enter、Exit

lock关键字基于Monitor.Enter,Monitor.Exit 实现

        static void Main(string[] args)
        {
            for (int j = 0; j < 10; j++)
            {
                int k = j;
                Task.Run(() =>
                {
                    Show(k);
                });
            }

            Console.ReadKey();
        }


        private static readonly object obj = new object();
        private static void Show(int num)
        {
            bool lockTaken = false;//是否获得了该锁
            //Monitor.TryEnter(obj, 2000, ref lockTaken);//等待锁时间,超过2000毫秒就不在等待获取锁
            Monitor.TryEnter(obj, -1, ref lockTaken);//获取锁,等同于Monitor.Enter(obj)
            /* TryEnter不阻塞线程,不会造成死锁,Enter会阻塞,可能造成死锁 */
            if (lockTaken)
            {
                Console.WriteLine($"{DateTime.Now}");
                try
                {
                    Console.WriteLine($"{num} 开始");
                    Thread.Sleep(1100);
                    Console.WriteLine($"{num} 结束");
                }
                finally
                {
                    Monitor.Exit(obj);//释放锁
                }
            }
            else
            {

            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值