Show/Hide Toolbars

XSharp

用途

BEGIN LOCKEND LOCK 关键字将语句块标记为关键部分。

语法

BEGIN LOCK object
  statements
END LOCK

参数

 

object 一个表达式,其求值指向一个用作锁定对象的对象引用。
statements 一个或多个语句或表达式,这些语句或表达式受 object 中指定的对象的互斥锁保护。

备注

 

BEGIN LOCK ... END LOCK 确保多个线程不能同时执行代码块中的语句。如果一个线程正在执行代码块中的代码,任何试图进入代码块的其他线程都将被暂停,直到正在执行的线程离开代码块。

用作锁定对象的对象必须是引用类型,不能是值类型,表达式不能求值为 NULL,否则会出现运行时错误。

BEGIN LOCK ... END LOCK 使用 Monitor.Enter() 和 Monitor.Exit() 来获取和释放指定对象上的锁。示例如下:

BEGIN LOCK lockObj
? "在警卫区"
END LOCK

等价于

System.Threading.Monitor.Enter( lockObj )
TRY
? "在警卫区"
FINALLY
System.Threading.Monitor.Exit( lockObj )
END TRY

 

 

建议使用 BEGIN LOCK ... END LOCK,而不是直接使用 Monitor(监视器) 类,因为这样代码更简洁,即使在保护块内出现异常,也能确保 Monitor(监视器) 对象被释放。

BEGIN LOCK ... END LOCK 提供的功能类似于 Windows API 函数 EnterCriticalSection() 和 LeaveCriticalSection()。不过,锁定对象可以使用任何引用类型的实例,而不是使用由 InitializeCriticalSection() 创建的对象。

有关详细信息,请参阅 System.Threading.Monitor 类的文档。