定义
lock关键字,互斥锁,通过锁住某一对象从而将语句块({})里面的代码设置为临界区。
线程在线性执行代码时若遇到互斥锁,必须先申请互斥锁的访问权,若访问成功,则继续线性访问互斥锁后的临界区代码块。声明如下:
1 Object thisLock = new Object(); 2 lock (thisLock) 3 { 4 // Critical code section. 5 }
lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
使用
-
锁定的对象
锁定的对象不能是Public类型,或者 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 使用都是不符合规范。
Lock的对象只有在非外部访问的情况下才不会对外部的线程代码产生影响。由于lock (this)、lock (typeof (MyType)) 和 lock ("myLock")中的this,typeof(MyType)有可能被外部访问,外部代码若存在与"myLock"相同的字符串,这些对象都会被锁住,对进程代码产生不可预测的影响。故而建议使用Private对象作为锁的对象。