ArkTS的SendableClass对象内存共享的原理是什么?有什么限制?如何使用?

北向实践与赋能 显示全部楼层 发表于 2024-1-4 11:15:24

ArkTS的SendableClass对象内存共享的原理是什么?有什么限制?如何使用?

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

北向实践与赋能

沙发 发表于 2024-1-4 11:15:42

ArkTS的SendableClass对象内存共享的原理是什么?有什么限制?如何使用?

原理澄清 SendableClass是基于Actor内存隔离并发模型的扩展,Sendable对象的内存是线程间共享的,但是仍然需要满足单线程无锁化运行。因此,要保证同一个Sendable实例不能多线程并发访问,开发者需要通过同步机制保证线程安全。 规格澄清:Sendable对象需要满足一定的规格:

  1. 成员属性为 Sendable类 或者基础类型(string number boolean等,Array等容器类待扩展后支持)
  2. 成员属性必须显式初始化
  3. 成员函数不能使用闭包,只能使用入参 或者 this成员 或者 import导入的变量
  4. 只允许Sendable类继承Sendable类
  5. @Sendable只能写在ArkTS(ets)文件中
  6. 不支持#定义私有属性,要用private
  7. 导出Sendable类的文件,不能导出非Sendable属性
  8. 传输方式有如下两种:     8.1 序列化传递:深拷贝到其他线程,非共享模式。     8.2 共享模式:可以跨线程引用传递,多线程可同时读写,开发者需要自行采用同步机制避免多线程竞争。

参考链接 https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/arkts-utils/multi-thread-concurrency-overview.md/

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部