javascript / expert
Snippet
Asynchroner Mutex für exklusiven Ressourcenzugriff
Ein Mutex stellt sicher, dass jeweils nur eine asynchrone Operation gleichzeitig auf einen kritischen Bereich zugreifen kann. Er verkettet Promises, um eine Warteschlange zu erstellen, in der jede Operation auf den Abschluss der vorherigen wartet, was Race Conditions in geteilten Umgebungen wie serverseitigen Caches verhindert.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Mutex {#promise = Promise.resolve();async acquire() {let release;const next = new Promise(res => release = res);const current = this.#promise;this.#promise = current.then(() => next);await current;return release;}}// Usage in Next.js Route Handlerconst mutex = new Mutex();export async function POST() {const release = await mutex.acquire();try {// Critical section} finally {release();}}
nextjs
Erklärung
1
this.#promise = current.then(() => next);
Hängt die neue Sperranfrage an die bestehende Promise-Kette an.
2
await current;
Wartet darauf, dass alle zuvor in die Warteschlange gestellten Operationen abgeschlossen sind.
3
return release;
Gibt eine Funktion zurück, die das 'next'-Promise auflöst und so die nächste Aufgabe startet.