sqlocal
Version:
SQLocal makes it easy to run SQLite3 in the browser, backed by the origin private file system.
29 lines (23 loc) • 476 B
text/typescript
type Mutex = {
lock: () => Promise<void>;
unlock: () => Promise<void>;
};
export function createMutex(): Mutex {
let promise: Promise<void> | undefined;
let resolve: (() => void) | undefined;
const lock = async () => {
while (promise) {
await promise;
}
promise = new Promise((res) => {
resolve = res;
});
};
const unlock = async () => {
const res = resolve;
promise = undefined;
resolve = undefined;
res?.();
};
return { lock, unlock };
}