Semaphore
HardPromises & Async25 min4 tests
Implement createSemaphore(permits) that controls concurrent access to a shared resource.
Requirements
acquire()— returns a Promise that resolves when a permit is available. Decrements the permit count.release()— frees one permit, allowing a waiting acquirer to proceed.- If permits are available,
acquire()resolves immediately. - If no permits are available,
acquire()waits until one is released.
Example
const sem = createSemaphore(2);
await sem.acquire(); // resolves immediately (permits: 1)
await sem.acquire(); // resolves immediately (permits: 0)
sem.acquire(); // waits... (no permits)
sem.release(); // now the waiting acquire resolvesHints (5)
- Track the number of available permits with a counter.
- If a permit is available on acquire(), decrement and resolve immediately.
- If no permits are available, push the resolve callback to a wait queue.
- On release(), if there are waiters, shift one off and call its resolve.
- If no waiters exist on release(), just increment the available counter.
Topics
- Promises & Async
Asked at
Google · Amazon · Apple · Netflix
