C# lock to Monitor Method Calls
直接結論:
lock 是一個語法糖,它將 Monitor物件進行包裝。
lock最終產生的是:Monitor.Enter和Monitor.Exit方法,並且包含了try和catch。保證在崩潰的時候執行到finally中的Monitor:Exit方法,進行鎖的釋放。
所以lock鎖定的方式,要比Monitor.Enter和Monitor.Exit安全一些。
Monitor.Enter 方法
Monitor.Enter(object)獲取鎖Monitor.Exit(object)釋放鎖
將 lock 改成Monitor.Enter 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static object baton = new object(); //接力棒:獲得使用權的變數
static void Main(string[] args)
{
//lock (baton)
Monitor.Enter(baton); //獲取鎖
try
{
Console.WriteLine("Got to baton");
} finally //finally無論如何都會執行
{
Monitor.Exit(baton); //釋放鎖
}
}
C# lock to Monitor Method Calls
C# Monitor和Lock的定义及区别
C#中的lock和Monitor.Enter和Monitor.Exit