SuperAPI AI 工具集

oh-arkruntime-thread-safety-audit

通用与其它

查看项目

更新于 10-16 03:11

技能介绍

用途:审计、审查或修复 ArkCompiler Runtime Core 的线程安全问题,重点覆盖 static_core/plugins/ets/stdlib 下的 ETS 标准库、static_core/plugins/ets 的运行时与插件代码,以及相关测试;仅当 ETS API 跨原生边界或 TSAN 报告指向 C++ 时,才检查相关原生代码。

背景:ArkTS-Sta 为并发执行模型,公开标准库 API 可能被 taskpool、EAWorker 或多个协程/worker 调用,故静态可变状态与全局单例默认应视为跨线程共享,除非能证明并非如此。

主要能力:提供分阶段扫描流程。第一阶段用 rg 检索 ETS/TS 中的静态字段、全局可变对象、缓存、锁与原子类型;第二阶段分析并发入口(公开 API、taskpool.execute、EAWorker、回调、native 方法等),确认候选状态是否可被并发触达;可选的原生跟进仅在必要时检索 C++ 侧的 mutex、atomic、thread_local 等。随后按类别(不可变常量、静态计数器、静态 Map/Array、单例、注册表/缓存等)分类,并按四项风险条件判定风险,划分为 High、Medium、Low、Candidate、No risk 五级。

修复建议:按问题选择最窄同步方案,如单个数值计数器用 AtomicInt/AtomicLong,单个布尔标志用 AtomicBoolean,必须成对一致的字段用同一互斥锁保护,惰性单例用锁保护的检查后设置,共享注册表用 ConcurrentHashMap 加锁式 get-or-create,复合状态用 per-slot 锁,全局输出构造用统一输出锁包住构建与输出。资料给出惰性单例、共享输出缓冲、共享 Map get-or-create、未同步计数器/布尔标志、成对缓存字段等坏模式与修复示例。

使用方式:按用户提供的文件、diff 或 API 面开始,仅在无更窄范围时才扩展到整个 static_core/plugins/ets。验证命令包括 git diff --check、ninja -C static_core/build plugins/ets/etsstdlib.abc,以及用 es2panda 与 ark 编译运行测试。测试策略建议用现有 taskpool、协程测试为模板,并按风险补充针对性并发测试与必要的 TSAN 说明。

限制:仅使用本检出或官方 OpenHarmony 文档中可找到的 API/类型;不可解析的示例应删除或标注为内部伪代码。不能仅因扫描命中 static 或存在锁就判定安全,须先证明并发路径与可描述的具体影响。资料未提供安装方式、收费或价格信息。