нужна помощь в создании аналога критической секции на javascript, то есть вход следующей функции в критическую секцию должен выполняться после выхода предыдущей, вот что есть сейчас:
class CriticalSection {
constructor() {
this._flag = false;
}
enter() {
if (!this._flag) {
return new Promise((resolve, reject) => {
this._flag = true;
setTimeout(() => resolve(), 3000);
});
} else {
//здесь нужно какое-то ограничение
}
}
leav() {
this._flag = false;
}
}
let cs = new CriticalSection();
cs.enter().then((value) => {
setTimeout(() => {
console.log(`1`);
cs.leav();
}, 2000)
}, null);
cs.enter().then((value) => {
setTimeout(() => {
console.log(`2`);
cs.leav();
}, 2000)
}, null);
Если проверка на закрытие верной секции не требуется, можно заменить токен на флаг.
class CriticalSection {
constructor() {
this.queue = []
this.token = null
}
enter() {
return new Promise((resolve, reject) => {
if (this.token) {
this.queue.push(() => resolve(this.token = {}))
} else {
resolve(this.token = {})
}
})
}
leave(token) {
if (this.token !== token) {
throw new Error("Leaving the wrong section")
}
if (this.queue.length) {
this.queue.shift()()
} else {
this.token = null
}
}
}
let cs = new CriticalSection();
cs.enter().then(token => {
console.log("Entered #1")
setTimeout(() => {
console.log("Timeout #1");
cs.leave(token);
console.log("Left #1");
}, 2000)
}, null);
cs.enter().then(token => {
console.log("Entered #2")
setTimeout(() => {
console.log("Timeout #2");
cs.leave(token);
console.log("Left #2");
}, 2000)
}, null);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброе время суток всемРебята ,сижу ломаю голову как сделать чтоб нажимаешь на кнопку и она стала зеленого цвета и рядом в диве высветилась...
При добавлении свойства "responsive: true" к "#reservations" и при нажатии на дочернюю строку - таблица открывается и закрываетсяПомогите мне пожалуйста
Есть две переменные, в которые записываются данные: