Асинхронный JavaScriptПараллельное программирование

Mutex

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(); // этот вызов ждет, когда первый разблокирует мьютекс