Kaynağa Gözat

feat: simple SynchronizedLock

siykt 1 yıl önce
ebeveyn
işleme
d50d596d9b
1 değiştirilmiş dosya ile 34 ekleme ve 0 silme
  1. 34 0
      src/content/synchronizedLock.js

+ 34 - 0
src/content/synchronizedLock.js

@@ -0,0 +1,34 @@
+class SynchronizedLock {
+  constructor() {
+    this.lock = false;
+    this.queue = [];
+  }
+
+  async getLock(timeout = 10000) {
+    while (this.lock) {
+      await new Promise((resolve) => {
+        this.queue.push(resolve);
+        setTimeout(() => {
+          const index = this.queue.indexOf(resolve);
+          if (index !== -1) {
+            this.queue.splice(index, 1);
+            console.warn('SynchronizedLock timeout');
+            resolve();
+          }
+        }, timeout);
+      });
+    }
+
+    this.lock = true;
+  }
+
+  releaseLock() {
+    this.lock = false;
+    const resolve = this.queue.shift();
+    if (resolve) resolve();
+  }
+}
+
+const synchronizedLock = new SynchronizedLock();
+
+export default synchronizedLock;