HarmonyOS 多线程锁问题

HarmonyOS 多线程锁问题

HarmonyOS
2024-08-27 10:13:18
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

为了解决多并发实例间的数据竞争问题,ArkTS语言基础库引入了异步锁能力。为了开发者的开发效率,AsyncLock对象支持跨并发实例引用传递。由于ArkTS语言支持异步操作,阻塞锁容易产生死锁问题,因此我们在ArkTS中仅支持异步锁(非阻塞式锁)。使用异步锁的方法需要标记为async,调用方需要await修饰调用,才能保证时序正确。因此会导致外层调用函数全部标记成async。

import utils from '@ArkTS.utils'; 
@Sendable 
class A { 
  lock_: utils.locks.AsyncLock = new utils.locks.AsyncLock(); 
  count_: number = 0; 
  async getCount() : Promise<number> { 
    return this.lock_.lockAsync<number>(async () => { 
      return this.count_; 
    }) 
  } 
  async setCount(count: number) { 
    await this.lock_.lockAsync<void>(async () => { 
      this.count_ = count; 
    }) 
  } 
} 
(async () => { 
  let a: A = new A 
  await a.setCount(100) 
  await a.getCount() 
})().then(() => { 
})
分享
微博
QQ
微信
回复
2024-08-27 18:47:13
相关问题
HarmonyOS 多线程数据互通问题
52浏览 • 2回复 待解决
HarmonyOS 多线程并发相关问题
271浏览 • 1回复 待解决
HarmonyOS 多线程安全问题验证
48浏览 • 1回复 待解决
HarmonyOS关于多线程问题
495浏览 • 1回复 待解决
HarmonyOS 多线程写法限制
171浏览 • 1回复 待解决
HarmonyOS多线程使用?
206浏览 • 0回复 待解决
ArkTs多线程方案如何保证线程安全
2599浏览 • 2回复 待解决
HarmonyOS线程的概念吗?
1668浏览 • 1回复 待解决
HarmonyOS是否支持多线程
171浏览 • 0回复 待解决
HarmonyOS 关于多线程并发的使用
50浏览 • 1回复 待解决
HarmonyOS 数据库多线程操作
207浏览 • 1回复 待解决
如何使用taskpool实现多线程
1175浏览 • 1回复 待解决
HarmonyOS 多线程共享数据方法的疑惑
56浏览 • 2回复 待解决
多线程中EGL如何共享Context
458浏览 • 1回复 待解决
HarmonyOS 怎么加和释放线程同步
779浏览 • 2回复 待解决
求大佬告知ArkTS是否支持多线程
2067浏览 • 1回复 待解决
如何实现多线程数据共享
2245浏览 • 1回复 待解决