HarmonyOS 调用napi_create_ark_runtime创建env失败

在C++的线程1调用napi_create_ark_runtime创建env,接着在另一个线程2调用napi_destroy_ark_runtime销毁env成功。然后再次在线程1调用napi_create_ark_runtime创建env就报错了,napi_status是23。

HarmonyOS
2024-12-25 10:22:51
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

在线程1调用napi_create_ark_runtime创建的env,只能在线程1使用,作用域也只是在线程1,不能在线程2调用napi_destroy_ark_runtime销毁env,这是属于多线程安全问题。是否多线程安全问题,参考方舟多线程检测:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-multi-thread-check-0000001919872114-V5开启多线程检测后在crash信息中会有类似如下的提示:

LastFatalMessage:[default] [CheckThread:188] Fatal: ecma_vm cannot run in multi-thread! thread:25523 currentThread:25550

可以通过栈信息直接定位到哪行代码的使用存在多线程问题如上,表示在25523线程创建的变量,但是在25550线程调用了,可以通过hilog打印查看线程对应关系,举例如下:

07-12 09:39:30.306 25413-25523 A00000/testTag com.examp...lication I enter CreateArkRuntimeFunc
.....
07-12 09:39:31.271 25413-25550 A00000/testTag com.examp...lication I enter DestoryArkRuntimeFunc
...
分享
微博
QQ
微信
回复
2024-12-25 13:05:13
相关问题
HarmonyOS NAPI调用HAR模块失败
837浏览 • 1回复 待解决
为什么禁止缓存napi_env
1310浏览 • 1回复 待解决
HarmonyOS napi_env如何跨线程使用
84浏览 • 1回复 待解决
undefined symbol napi_create_threadsafe_function
4670浏览 • 1回复 待解决
NAPI执行上层回调时,如何获取env
2465浏览 • 1回复 待解决
如何在NAPI执行上层回调时获取env
443浏览 • 1回复 待解决
HarmonyOS Napi Arraybuffer无法创建
227浏览 • 1回复 待解决