From a7746e7cf2a3b57b6792a6b5ed55d9bc65f90373 Mon Sep 17 00:00:00 2001 From: ah Date: Tue, 1 Jul 2025 11:42:42 +0800 Subject: [PATCH] test in bug Signed-off-by: ah --- .../entry/src/main/ets/pages/Cale.ets | 89 +++++++++++++++++++ .../entry/src/main/ets/pages/Index.ets | 2 + 2 files changed, 91 insertions(+) create mode 100644 code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Cale.ets diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Cale.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Cale.ets new file mode 100644 index 0000000000..39242f87ae --- /dev/null +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Cale.ets @@ -0,0 +1,89 @@ +// 此段示例为伪代码仅作为逻辑示意,便于开发者理解使用内存共享模型和Actor模型的区别 +class Queue { + // ... + push(value: number) {} + + empty(): boolean { + // ... + return true + } + + pop(value: number) :number { + // ... + return value; + } +} + +class Mutex { + // ... + lock(): boolean { + // ... + return true; + } + + unlock() { + + } +} +class BufferQueue { + queue: Queue = new Queue() + mutex: Mutex = new Mutex() + add(value: number) { + // 尝试获取锁 + if (this.mutex.lock()) { + this.queue.push(value) + this.mutex.unlock() + } + } + + take(value: number): number { + let res: number = 0; + // 尝试获取锁 + if (this.mutex.lock()) { + if (this.queue.empty()) { + res = 1; + } + let num: number = this.queue.pop(value) + this.mutex.unlock() + res = num; + } + return res; + } +} + +// 构造一段全局共享的内存 +let g_bufferQueue = new BufferQueue() + +class Producer { + constructor() { + } + run() { + let value = Math.random() + // 跨线程访问bufferQueue对象 + g_bufferQueue.add(value) + } +} + +class ConsumerTest { + constructor() { + } + run() { + // 跨线程访问bufferQueue对象 + let num = 123; + let res = g_bufferQueue.take(num) + if (res != null) { + // 添加消费逻辑 + } + } +} + +export function Main(): void { + let consumer: ConsumerTest = new ConsumerTest() + let producer1: Producer = new Producer() + for (let i = 0;i < 0;i++) { + // 模拟启动多线程执行生产任务 + // let thread = new Thread() + // thread.run(producer.run()) + // consumer.run() + } +} diff --git a/code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Index.ets b/code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Index.ets index b4527d4840..0aef38ccd4 100755 --- a/code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/ArkTS/ArkTsConcurrent/MultithreadedConcurrency/MultiThreadConcurrencyOverview/entry/src/main/ets/pages/Index.ets @@ -15,6 +15,7 @@ // [Start actor_model] import { taskpool } from '@kit.ArkTS'; +import { Main } from './Cale' // 跨线程并发任务 @Concurrent @@ -47,6 +48,7 @@ struct Index { }.onClick(() => { let produceTask: taskpool.Task = new taskpool.Task(produce); let consumer: Consumer = new Consumer(); + Main(); for (let index: number = 0; index < 10; index++) { // 执行生产异步并发任务 taskpool.execute(produceTask).then((res: Object) => { -- Gitee