HarmonyOS 多线程共享数据方法的疑惑

从这里看了几个官网文档,https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-58-V5, 可以看到有很多问题是关于多线程之间共享数据的疑问和咨询。也看到了大部分回答线程间内存共享都是推荐了sharedarraybuffer+Atomics的方案。

但是理解实际上Atomics锁住的只是sharedarraybuffer中某一个位置的数值。如果需要共享的数据是1000个字节的sharedarraybuffer,Atomics.wait和Atomics.notify又怎么保证其余999个位置的数据没有出现竞争而获取到的是无效数据呢?感觉这个Atomics和加锁的功能还是不一样呀?

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

可共享对象SharedArrayBuffer,是拥有固定长度的原始二进制数据缓冲区,可以存储任何类型的数据,包括数字、字符串等。

它支持在多线程之间传递,传递之后的SharedArrayBuffer对象和原始的SharedArrayBuffer对象可以指向同一块内存,进而达到共享内存的目的。SharedArrayBuffer对象存储的数据在子线程中被修改时,需要通过原子操作保证其同步性,即下个操作开始之前务必需要保证上个操作已经结束。

下面将通过示例说明原子操作保证同步性的必要性。Atomics对象提供了一组静态方法用来对 SharedArrayBuffer对象进行原子操作。这些原子操作属于Atomics模块。与一般的全局对象不同,Atomics不是构造函数,因此不能使用new操作符调用,也不能将其当作函数直接调用。Atomics的所有属性和方法都是静态的(与 Math 对象一样)。多个共享内存的线程能够同时读写同一位置上的数据。原子操作会确保正在读或写的数据的值是符合预期的,即下一个原子操作一定会在上一个原子操作结束后才会开始,其操作过程不会中断。Atomics锁住的是sharedarraybuffer创建的所有区域。

分享
微博
QQ
微信
回复
3天前
相关问题
如何实现多线程数据共享
2243浏览 • 1回复 待解决
多线程中EGL如何共享Context
448浏览 • 1回复 待解决
HarmonyOS 多线程数据互通问题
48浏览 • 2回复 待解决
HarmonyOS 数据多线程操作
202浏览 • 1回复 待解决
如何实现跨线程数据共享
292浏览 • 1回复 待解决
HarmonyOS多线程使用?
206浏览 • 0回复 待解决
HarmonyOS关于多线程问题
489浏览 • 1回复 待解决
HarmonyOS 多线程锁问题
524浏览 • 1回复 待解决
HarmonyOS是否支持多线程
166浏览 • 0回复 待解决
HarmonyOS 多线程写法限制
166浏览 • 1回复 待解决
HarmonyOS 关于多线程并发使用
44浏览 • 1回复 待解决