HarmonyOS C动态链接库运行时内存段的疑问
现在App运行,有一个主线程A,又开启了一个子线程B。现在在主线程A中,执行C动态链接库里面的函数,拉起了C语言编写的线程THREAD_NATIVE_1。
现在A和B,两个线程,内存隔离。那么这个动态链接库里面的THREAD_NATIVE属于线程A的内存?还是归属线程B的内存,亦或者不归属以上内存段作为独立内存段?再以上的条件上,子线程B,也执行了动态链接库里面的函数,又起了一个C语言的线程THREAD_NATIVE_2, 请问这个THREAD_NATIVE_2和THREAD_NATIVE_1的内存关系。THREAD_NATIVE_1 和 THREAD_NATIVE_2 之间共享内存吗?又和A和B共享内存吗?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HAP和HAR的运行时内存模型
529浏览 • 1回复 待解决
如何动态查看代码运行时变量值?
927浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙项目中链接QoS动态链接库?
408浏览 • 1回复 待解决
如何将C++代码编译成HarmonyOS手机可以使用的so动态链接库
2579浏览 • 2回复 待解决
HarmonyOS 如何修改NativeAPI项目中的生成的动态链接库so名称
178浏览 • 1回复 待解决
HarmonyOS 使用AppStartup,运行时异常
309浏览 • 1回复 待解决
HarmonyOS App运行时rawfile里面的文件是否可以做到动态更新?
111浏览 • 1回复 待解决
获取运行时编译构建参数
1352浏览 • 1回复 待解决
HarmonyOS 运行时报SourceMap is not initialized yet
328浏览 • 1回复 待解决
测试脚本运行时安装app报错
598浏览 • 1回复 待解决
运行时AOP插桩demo测试
1288浏览 • 1回复 待解决
应用运行时进程资源使用规格
2095浏览 • 1回复 待解决
ArkTs 有运行时创建指定类的方法吗?
565浏览 • 1回复 待解决
HarmonyOS 是否有线上运行时,收集功耗的成熟方案
212浏览 • 1回复 待解决
获取app进程运行时间api疑似不准
642浏览 • 1回复 待解决
如何在ArkTS中实现Java运行时注解的能力?
1693浏览 • 1回复 待解决
A 页面跳转 B 页面,需要传入扩展方法,让 B 页面在运行时调用,以实现定制 B 页面运行时的效果
1017浏览 • 1回复 待解决
为什么ArkTS禁止在运行时变更对象布局?
738浏览 • 1回复 待解决
HarmonyOS 自定义组建运行时错误,this指向有问题
858浏览 • 1回复 待解决
如何判断JS运行时是否处于HarmonyOS JSVM环境中
937浏览 • 1回复 待解决
把arkts运行时,当成 JS上下文用
2022浏览 • 1回复 待解决
HarmonyOS 声明配置权限后,在app运行时,没有弹窗
550浏览 • 1回复 待解决
HarmonyOS 运行时AOP方案,多线程场景如何处理?
415浏览 • 1回复 待解决
如何在运行时获取对象实现的接口信息
1030浏览 • 1回复 待解决
HarmonyOS 如何将多个class对应的object,在运行时合并
112浏览 • 2回复 待解决
需要考虑以下几点:
1、线程和内存隔离:在多线程应用程序中,每个线程都有自己的栈空间(线程局部存储),这些栈空间是相互隔离的,不同线程之间不能直接访问对方的栈空间。
2、动态链接库中的线程归属:动态链接库中创建的线程(比如THREAD_NATIVE_1和THREAD_NATIVE_2)通常会绑定到调用它们的线程的上下文中。这意味着,如果是在主线程A中调用DLL中的函数来创建THREAD_NATIVE_1,那么THREAD_NATIVE_1的内存将属于主线程A的栈空间。同样地,如果是在子线程B中调用DLL中的函数来创建THREAD_NATIVE_2,那么THREAD_NATIVE_2的内存将属于子线程B的栈空间。
3、线程间的内存共享:
不同线程的内存不共享:主线程A和子线程B各自的栈空间是独立的,它们不能直接共享内存。
同一线程的不同函数的内存可能共享:在同一个线程内,如果不同函数在栈上分配的内存没有被释放,这些内存可能会共享,但需要小心管理以避免内存泄漏或竞态条件。
4、动态链接库中的多线程管理:动态链接库本身是线程安全的,但动态创建的线程(比如THREAD_NATIVE_1和THREAD_NATIVE_2)的内存管理应当遵循线程所属的上下文。
所以,THREAD_NATIVE_1属于主线程A的内存,而THREAD_NATIVE_2则属于子线程B的内存。它们分别与各自的父线程相关联,不会直接共享内存。如果需要在线程之间共享数据,通常需要使用线程间通信机制,如互斥量、信号量或共享内存等,来确保安全地共享数据。