| 123456789101112131415161718192021222324 |
- export class Mutex {
- constructor() {
- this._locked = false;
- this._waiting = [];
- }
- lock() {
- const unlock = () => {
- const next = this._waiting.shift();
- if (next) {
- next(unlock);
- } else {
- this._locked = false;
- }
- };
- if (this._locked) {
- return new Promise(resolve => this._waiting.push(resolve)).then(() => unlock);
- } else {
- this._locked = true;
- return Promise.resolve(unlock);
- }
- }
- }
|