aardio 文档

aardio 范例: 线程共享变量

//线程共享变量
import console.int;
import thread.table;

//线程都独享全局变量环境,下面创建一个多线程共享变量。
var thrdVar = thread.var();
thread.invokeAndWait(
    function(thrdVar){

        //修改线程共享变量的值
        thrdVar.set(123456);

    },thrdVar//线程变量可以传入其他线程使用
)

//获取线程共享变量的值
console.log(thrdVar.get());

//及时释放不再使用的线程共享变量
thrdVar.release();

//thread.table 则是创建了一个线程间共享的 table 对象, 
var thrdTable = thread.table()

var thrdHandle1 = thread.create(
    function(thrdTable){ 

    thrdTable.push( "线程ID:" + thread.getId() )

    //用下标读写线程共享表的键值,键名与对象的属性、函数名同名不会冲突。
    thrdTable["b"] = 34; 
    thrdTable["c"]= 56; 

    //可以读写普通表,但子表并不是线程共享表。
    thrdTable["d"] = {}; 

    //每次读取 thrdTable.d 都会得到新的副本
    var localData = thrdTable["d"];

    //修改 localData 不会自动会同步到线程共享资源。
    localData.tab = { name = "name" }

    //下面这样只是修改子表的临时副本,子表不是线程共享表
    thrdTable.d.tab = { name = "name" }

    //只有修改线程共享表的直接成员,才会自动同步到线程共享资源
    thrdTable["d"] = localData;

    //注意 # 操作符不适合用于线程共享表
    var len = #thrdTable

    //应当用 len 函数或 length 属性获取共享数组长度
    len = thrdTable.len(); // 也可以用 thrdTable.

    //线程共享表可作为参数传入其他线程
    },thrdTable
)

//等待线程执行完,并关闭所有线程句柄
thread.waitClose(thrdHandle1) 

//读取线程表的成员
console.log( thrdTable.pop(2) )

//读取线程表的成员
console.log( thrdTable.a ); 

//遍历共享表
for( k,v in thrdTable.each() ){ 
    console.dump(k,v);
}

//不使用的线程共享表应及时释放。
thrdTable.release();

Markdown 格式