import { MessageEvents, worker } from '@kit.ArkTS';
let sab = new SharedArrayBuffer(32);
// int32 buffer view for sab
let i32a = new Int32Array(sab);
i32a[0] = 0;
let producer = new worker.ThreadWorker("entry/ets/workers/worker_producer.ts")
producer.postMessage(sab);
let consumection = (e: MessageEvents) => {
let sab: number = e.data;
let i32a = new Int32Array(sab);
console.info("Customer: received sab");
while (true) {
Atomics.wait(i32a, 0, 0); // blocked here until be waked.
let length = i32a.length;
for (let i = length - 1; i > 0; i--) {
console.info("arraybuffer " + i + " value is " + i32a[i]);
i32a[i] = i;
}
}
}
可以使用共享对象SharedArrayBuffer实现。SharedArrayBuffer对象存储的数据在同时被修改时,需要通过Atomics原子操作保证其同步性,即下个操作开始之前务必需要等到上个操作已经结束。代码示例: