zoukankan      html  css  js  c++  java
  • node.js 事件同步锁

    code

    由于AsyncLock无法在线程间传递,所以使用事件代替线程,模拟线程间同步:

    import AsyncLock from 'async-lock';
    var lock = new AsyncLock();
    
    function main() {
        setTimeout(() => task(1), 1000);
        setTimeout(() => task(2), 1000);
    }
    
    async function task(threadId) {
        console.log('线程启动: ' + threadId);
        await lock.acquire('a', async () => {
            console.log(threadId + '开始工作');
            await sleep(2000);
            console.log(threadId + '工作完毕');
        });
        console.log('释放' + threadId);
    }
    
    function sleep(n) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(null);
            }, n);
        });
    }
    
    main();
    

    输出是:

    线程启动: 1
    1开始工作
    线程启动: 2
    ------------------2秒后.................
    1工作完毕
    2开始工作
    释放1
    ------------------2秒后.................
    2工作完毕
    释放2
    
  • 相关阅读:
    变量定义方法
    动态编译
    函数
    过程
    触发器
    高级聚合函数rollup(),cube(),grouping sets()
    高级函数-decode
    高级函数-sign
    js 保留两位小数 javascript
    js 发红包
  • 原文地址:https://www.cnblogs.com/develon/p/15724397.html
Copyright © 2011-2022 走看看