Mutex расшифровывается как mutual exclusion lock и является базовым кирпичиком параллельного праграммирования. Мы не разбираем параллельное программирование, эта задача — адаптация идеи для асинхронного программирования в JS.
Мьютекс позволяет получать доступ к выполнению секции кода одномоментно ровно для одной задачи.
Необходимо реализовать класс Mutex
с двумя методами:
acquire
— переводит мьютекс в заблокированное состояние, при этом поток блокируется до освобождения мьютекса, если другой поток уже владеет им;release
— переводит мьютекс в незаблокированное состояние.class Mutex { acquire(): Promise<void>; release(): void; }
const mutex = new Mutex(); async function criticalSection() { await mutex.acquire(); try { // код здесь не может выполняться двумя функциями одновременно } finally { mutex.release(); } } criticalSection(); criticalSection(); // этот вызов ждет, когда первый разблокирует мьютекс