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 ;
}
}