try_lock 语句
语法
- try_lock ( 锁定列表1 ) { 语句列表 }
注释:
- 锁定列表的定义:
- 待锁定项2 (, 待锁定项)*
- 待锁定项的定义:
- (read :)? 表达式
描述
try_lock 语句用于锁定若干指定的 可锁定目标,并阻塞直到所有的锁定成功。
可锁定目标 包括以下类型的表达式:
handle: 如果给定的handle是一个object,则如同锁定该对象的域;否则锁定该handle本身。string: (不常用)根据名称查找pseudo handle并锁定它。array: 数组应当(仅)包含若干可锁定目标元素,锁定这些元素。
如果遇到不可锁定的类型,抛出异常。
如果在尝试锁定某些 可锁定目标 时,因为锁优先级冲突或其他检查违例,抛出异常。GS 保证不会因为锁定顺序不一致而死锁。
handle 的锁定方法各不相同,也并非所有的 handle 都能被 try_lock 语句锁定,取决于具体的 handle 类型:
| 常见 handle 类型 | 锁定级别 | 是否支持 读 锁定 |
|---|---|---|
| pseudo | ATOM_LOCK(255) 不能使用 try_lock 锁定 | ✖ |
| program | ATOM_LOCK(255) 不能使用 try_lock 锁定 | ✖ |
| domain | DOMAIN_LOCK(1) | ✖ |
| object | DOMAIN_LOCK(1) try_lock 语句锁定 object 等效于锁定对象的域 | ✖ |
| sync_object | ATOM_LOCK(255) |