C#之Lock

时间:2023-07-13 08:19:26

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。

class Program
{
static void Main(string[] args)
{
Thread t = new Thread(LockObject.MonitorIncrement);
Thread t1=new Thread(new ThreadStart(LockObject.LockIncrement));
t.Start();
t1.Start();
}
} public class LockObject
{
/// <summary>
/// 多线程共享数据
/// </summary>
private static int counter = ;
/// <summary>
/// 同步对象,推荐这种写法
/// 应避免锁定 public 类型,否则实例将超出代码的控制范围
/// 具体如:lock (this)、lock (typeof (MyType)) 和 lock ("myLock")
/// </summary>
private readonly static object synisynchronize = new object(); public static void MonitorIncrement()
{
///Monitor.Enter 与 Monitor.Exit 相当于Lock
Monitor.Enter(synisynchronize);
Thread.Sleep();
counter++;
Console.WriteLine("MonitorIncrement counter={0}", counter);
Monitor.Exit(synisynchronize);
} public static void LockIncrement()
{
///lock在开始时调用 Monitor.Enter
///在结束时调用 Monitor.Exit 。
lock (synisynchronize)
{
counter++;
Console.WriteLine("LockIncrement counter={0}" ,counter);
}
}
}

运行结果如下图示:

aaarticlea/png;base64,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" alt="" />