В примере 4-callback.js используется очередь для вызова колбеков, однако каждый экземпляр семафора имеет свою очередь, а не общую, из-за чего потоки, которые не смогут сразу войти в критическую секцию, никогда не исполнят свой код.
class CountingSemaphore {
constructor(shared, offset = 0, initial) {
this.counter = new Int32Array(shared, offset, 1);
if (typeof initial === 'number') {
this.counter[0] = initial;
}
this.queue = [];
}
}