Нужна будет глобальная очередь задач. Каждая задача - это футура (или промис). Также нужен будет пул потоков, который обслуживает эту очередь задач.
Ну и всё, каждая вновь созданная футура ложится в эту очередь задач и терпеливо ждёт своего выполнения.