前言
异步锁是一种用于控制并发访问的锁机制,主要用于多线程/多任务环境下。异步锁允许多个任务并行执行,但是只允许一个任务在同一时间获取锁并执行临界区代码,其他任务需要等待该锁释放后才能获取锁并执行自己的临界区代码。
异步锁实现了互斥访问的机制,确保了同一时间只有一个任务可以访问共享资源。当一个任务获取了锁并执行临界区代码时,其他任务需要等待,直到锁被释放才能获取锁并执行自己的临界区代码。
异步锁的实现可以基于各种机制,如互斥量、信号量等。在使用异步锁时,需要注意避免死锁和活锁等并发访问问题,以确保程序的正确性和性能。
在许多编程语言和框架中,都提供了异步锁的内置支持或相关的库/工具,如Java的ReentrantLock、Python的asyncio.Lock等,开发者可以根据具体需求选择合适的异步锁实现。
一、js实现
编写lockUtils.js工具类
//简易异步锁对象,将异步任务变为并行运行
export class AsyncLock {
constructor() {
this.queue = [];
this.isLocked = false;
this.version = '0'
}
/**
* 获取锁
* @param {*} expire 锁过期时间
*/
async lock(expire) {
// 如果锁已被占用,则将当前任务加入等待队列
if (this.isLocked) {
if (this.queue.length < 10) {
await new Promise(resolve => this.queue