1234567891011121314151617181920212223242526272829303132 |
- 'use strict';
- class Mutex {
- constructor() {
- this._locked = false;
- this._queue = [];
- }
- lock(fn) {
- if (this._locked) {
- this._queue.push(fn);
- return;
- }
- this._locked = true;
- fn();
- }
- unlock() {
- if (!this._locked) return;
- const next = this._queue.shift();
- if (next) {
- next();
- } else {
- this._locked = false;
- }
- }
- }
- module.exports = Mutex;
|