Будет ли `std :: future :: then` выделять память? Возможен ли пользовательский распределитель?

std::promise имеет конструктор который выделяет память, используемую для хранения общего состояния. В реализации .then, который я видел до сих пор, один хранит функцию в стертой манере, похожей на std::function в общее состояние. совпадение Библиотека Stlab даже заходит так далеко, чтобы положить

using then_t = std::vector<std::pair<executor_t, task<void()>>>;

в общее состояние (чтобы включить расщепляемые фьючерсы).

Есть ли намерение указать, можно ли указывать распределитель для продолжений?

В P0443R3 они говорят в 1.2.9 Свойства для настройки выделения памяти

Реализации исполнителя должны использовать предоставленный распределитель для выделения
любая память, необходимая для хранения представленного объекта функции.

Я думаю, что это только означает, что хранилище для агентов, представленных через execute функции не указатель в std::futureОбщее состояние.

Я изучил недавние предложения по фьючерсам или исполнителям, и я не смог ничего найти. Недавние статьи, кажется, в любом случае предпочитают ставить исполнителей в общее будущее. Если исполнитель будет иметь связанный пользовательский распределитель, следует ли это использовать?

Я чувствую, что скучаю по чему-то.

Редактировать: Я думал об этом больше и думаю, что могу понять, почему кто-то хотел бы оставить это неуказанным. Если исполнители когда-либо параметризуют фьючерсы, их общее состояние может схематически выглядеть следующим образом

template <typename Executor, typename T>
struct shared_state_t {
// some prevention from race condition, for example
std::atomic<unsigned> flags;
// some sort of exception or value representation, for example
std::variant<std::exception_ptr, T> maybe_value;
// some handle to continuation
continuation_t<Executor, T> continuation;
};

где continuation_t<Executor, T> не нужно выделять память. Это может быть указатель на внутренний агент выполнения одного исполнителя Executor или что-то вроде std::function<void(T&&)> для другого исполнителя.

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]