Вся реализация со списком Не отлаживал, конечно, но как то так
class CPoolItem {
next = null;
prev = null;
operation;
constructor (operation) {
this.operation = operation;
}
}
class CPool {
first = null;
last = null;
constructor () {}
// добавить в конец
add (item) {
this.fist ??= item;
item.prev = this.last;
if (this.last)
this.last.next = item;
this.last = item;
return this;
}
// удалить item
delete (item) {
const next = item.next;
const prev = item.prev;
if (!prev)
this.first = next;
else
prev.next = next;
if (!next)
this.last = prev;
else
next.prev = prev;
return this;
}
// последовательно просмотреть pool, выполняя операции, какие возможно.
view () {
let item = this.first;
while (item) {
if (canExec(item.operation)) {
exec (item.operation);
this.delete(item)
}
item = item.next
}
}
}
const pool = new CPool();
// Когда поcтупила новая операция делаем
poll.add(new CPoolItem(operation));
pool.view();
// Когда какая то операция выполнилась удаляем участников из буфера и делаем
pool.view();
// canExec(operation) проверяет, что участников операции нет в буфере
// exec (operation) добавляет участников в буфер и отправляет операцию на исполнение.