锁定声明
使用 lock
语句,你可以控制不同线程对代码块内代码的访问。它通常用于防止竞争条件,例如多个线程从集合中读取和删除项目。由于锁定强制线程等待其他线程退出代码块,因此可能导致其他同步方法可以解决的延迟。
MSDN
lock 关键字通过获取给定对象的互斥锁,执行语句,然后释放锁来将语句块标记为关键部分。
lock 关键字确保一个线程不进入代码的关键部分,而另一个线程处于临界区。如果另一个线程试图输入锁定的代码,它将等待,阻止,直到该对象被释放。
最佳做法是定义要锁定的私有对象,或私有静态对象变量以保护所有实例共有的数据。
在 C#5.0 及更高版本中,lock
语句相当于:
bool lockTaken = false;
try
{
System.Threading.Monitor.Enter(refObject, ref lockTaken);
// code
}
finally
{
if (lockTaken)
System.Threading.Monitor.Exit(refObject);
}
对于 C#4.0 及更早版本,lock
语句相当于:
System.Threading.Monitor.Enter(refObject);
try
{
// code
}
finally
{
System.Threading.Monitor.Exit(refObject);
}