C#线程的同步:锁、死锁

lock实现代码块只允许被一个线程访问

例如多个窗口售票,余票数的计算

复制代码
using System;
using System.Threading;

namespace ConsoleApplication3
{
    class Program
    {
        int num = 10;
        void SellTicket()//售票
        {
            while (true)
            {
                lock (this)//同一时间,只允许一个线程执行此代码块
                {
                    if (num > 0)
                    {
                        Thread.Sleep(100);
                        Console.WriteLine(Thread.CurrentThread.Name + "剩余票数:" + num);
                        num -= 1;
                    }
                }               
            }
        }
        static void Main(string[] args)
        {
            Program p = new Program();//类的对象,方便引用静态成员
            Thread t1 = new Thread(p.SellTicket);
            t1.Name="窗口1";
            Thread t2 = new Thread(p.SellTicket);
            t2.Name = "窗口2";
            Thread t3 = new Thread(p.SellTicket);
            t3.Name = "窗口3";
            t1.Start();
            t2.Start();
            t3.Start();
        }
    }
}
复制代码

 

posted @   夕西行  阅读(225)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示