using SharedMessageT = std::shared_ptr<Message>;
std::promise<SharedMessageT> p;
auto f = p.get_future();
vector<jthread> thr_vec;
{
auto sm = std::make_shared<Message>();
auto lambda = [&p, sm]() mutable {
doConsume(*sm);
if (sm.resurrect()) {
p.set_value(std::move(sm));
}
};
for (size_t i = 0; i < 4; ++i) {
thr_vec.emplace_back(lambda);
}
if (sm.resurrect()) {
p.set_value(std::move(sm));
}
}
{
auto sm = f.get();
doReuse(sm);
}