import { worker } from '@kit.ArkTS';
@Entry
@Component
struct Index {
build() {
Column() {
Button()
.width(200)
.onClick(() => {
let sab = new SharedArrayBuffer(32);
let i32a = new Int32Array(sab);
i32a[0] = 0;
let producer = new worker.ThreadWorker("entry/ets/workers/worker_producer.ets");
producer.postMessage(sab);
let consumer = new worker.ThreadWorker("entry/ets/workers/worker_consumer.ets");
consumer.postMessage(sab);
})
}
}
}
Worker底层模型为Actor模型,本身线程间隔离,内存不共享。目前可以通过传输可共享对象SharedArrayBuffer达到内存共享的目的。
但需要注意,SharedArrayBuffer对象存储的数据在同时被修改时,需要通过原子操作保证其同步性,即下个操作开始之前务必需要等到上个操作已经结束。
参考代码如下:
参考链接
@ohos.worker (启动一个Worker)
多线程并发概述 (TaskPool和Worker)
Actor模型
可共享对象