如何实现跨线程数据共享

如何实现跨线程数据共享。

HarmonyOS
2024-09-18 12:24:57
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

从API 11开始,ArkTs支持使用@Sendable,可以使用@Sendable创建共享模块来实现跨线程数据共享,参考链接:Sendable共享模块

参考代码:

// 共享模块sharedModule.ets 
import { ArkTSUtils } from '@kit.ArkTS'; 
 
// 声明当前模块为共享模块,只能导出可Sendable数据 
"use shared" 
 
// 共享模块,SingletonA全局唯一 
@Sendable 
class SingletonA { 
  private count_: number = 0; 
  lock_: ArkTSUtils.locks.AsyncLock = new ArkTSUtils.locks.AsyncLock() 
  public async getCount(): Promise<number> { 
    return this.lock_.lockAsync(() => { 
      return this.count_; 
    }) 
  } 
  public async increaseCount() { 
    await this.lock_.lockAsync(() => { 
      this.count_++; 
    }) 
  } 
} 
 
export let singletonA = new SingletonA();
import { taskpool } from '@kit.ArkTS'; 
import { singletonA } from './sharedModule' 
 
@Concurrent 
async function increaseCount() { 
  await singletonA.increaseCount(); 
  console.info("SharedModule: count is:" + await singletonA.getCount()); 
} 
 
@Concurrent 
async function printCount() { 
  console.info("SharedModule: count is:" + await singletonA.getCount()); 
} 
 
@Entry 
@Component 
struct Index { 
  build() { 
    Row() { 
      Column() { 
        Button("MainThread print count") 
          .onClick(async () => { 
            await printCount() 
          }) 
        Button("Taskpool print count") 
          .onClick(async () => { 
            await taskpool.execute(printCount); 
          }) 
        Button("MainThread increase count") 
          .onClick(async () => { 
            await increaseCount() 
          }) 
        Button("Taskpool increase count") 
          .onClick(async () => { 
            await taskpool.execute(increaseCount); 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}
分享
微博
QQ
微信
回复
2024-09-18 17:09:49
相关问题
如何实现线程数据共享
2220浏览 • 1回复 待解决
@Extend的样式如何组件共享
2393浏览 • 1回复 待解决
TaskPool线程内存如何共享
2113浏览 • 1回复 待解决
Actor线程内存如何共享
425浏览 • 1回复 待解决
Worker线程内存如何共享
2306浏览 • 1回复 待解决
HAP和HSP之间如何实现数据共享
1875浏览 • 1回复 待解决
线程中EGL如何共享Context
414浏览 • 1回复 待解决
NAPI线程调用TS线程函数
1205浏览 • 1回复 待解决
是否支持Context线程传递
1868浏览 • 1回复 待解决