添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Object 内置对象
var coroutine = require ( "coroutine" ) var l = new coroutine.Lock() var v = 100 function f ( ) { l.acquire() v = 200 coroutine.sleep( 1 ) v = 300 l.release() coroutine.start(f) coroutine.sleep( 1 ) l.acquire() assert.notEqual( 300 , v) assert.equal( 200 , v) l.release()

首先创建了一个Lock对象,并进入纤程 f,获取锁后修改变量 v,然后释放锁。在主线程中,先等待纤程 f 完成……当纤程 f 释放了 Lock 后,主线程开始获取 Lock,确保变量 v 的值被改为 300。

acquire 方法用于获取锁的拥有权,当锁处于可获取状态时,此方法立即返回 true。

当锁不可获取,且 blocking 为 true,则当前纤程进入休眠,当其他纤程释放锁后,此方法返回 true。

当锁不可获取,且 blocking 为 false,则方法返回 false。

release

释放锁的拥有权

1
Lock.release();

此方法将释放对锁的拥有权,如果当前纤程未拥有锁,此方法将抛出错误。

count

查询当前等待任务数

1
Integer Lock.count();

返回结果:

  • Integer, 返回任务数
  • toString

    返回对象的字符串表示,一般返回 "[Native Object]",对象可以根据自己的特性重新实现

    1
    String Lock.toString();

    返回结果:

  • String, 返回对象的字符串表示
  • toJSON

    返回对象的 JSON 格式表示,一般返回对象定义的可读属性集合

    1
    Value Lock.toJSON(String key = "");

    调用参数:

  • key: String, 未使用
  •