C# 进阶 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

lock

  当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待。但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源在同一时刻只能被一个线程操作,以确保每个操作都是有效即时的,也即保证其操作的原子性。lock是C#中最常用的同步方式,格式为:lock(objectA){codeB}

using System;
using System.Threading;
namespace test
{
class Program
    {
        static void Main(string[] args)
        {
        threda t=new threda();
        threda.obj.i = 10;
        Thread th1 = new Thread(new ThreadStart(t.hhh));
        th1.Name = "th1";
        th1.Start();

        Thread th2 = new Thread(new ThreadStart(t.hhh));
        th2.Name = "th2";
        th2.Start();
        }
    }
class threda
    {
        public static sss obj = new sss();

        public void hhh()
        {
            lock (obj)            //lock锁
            { 
                for (int i = 0; i < 7; i++)
                {
                    Thread.Sleep(500);

                    if (obj.i >0)
                    {
                        obj.i--;
                        Console.WriteLine("Current Thread Name: "+Thread.CurrentThread.Name+", obj.i= " + obj.i);
                    }
                }
            }
        }
    }

    class sss
    {
       public int i ;
    }
}