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
2024-12-25 08:07:13
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

需要考虑以下几点:

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的内存。它们分别与各自的父线程相关联,不会直接共享内存。如果需要在线程之间共享数据,通常需要使用线程间通信机制,如互斥量、信号量或共享内存等,来确保安全地共享数据。

分享
微博
QQ
微信
回复
2024-12-25 11:13:41
相关问题
HAP和HAR运行时内存模型
529浏览 • 1回复 待解决
如何动态查看代码运行时变量值?
927浏览 • 1回复 待解决
HarmonyOS 使用AppStartup,运行时异常
309浏览 • 1回复 待解决
获取运行时编译构建参数
1352浏览 • 1回复 待解决
测试脚本运行时安装app报错
598浏览 • 1回复 待解决
运行时AOP插桩demo测试
1288浏览 • 1回复 待解决
应用运行时进程资源使用规格
2095浏览 • 1回复 待解决
ArkTs 有运行时创建指定类方法吗?
565浏览 • 1回复 待解决
获取app进程运行时间api疑似不准
642浏览 • 1回复 待解决
把arkts运行时,当成 JS上下文用
2022浏览 • 1回复 待解决