Можно ли блокировать группу блокировок/фьючерсов/любых блокируемых объектов, пока не будет готова какая-либо из них? Идея состоит в том, что мы можем сделать:
std::vector<std::future<T>> futures = ...;
auto ready_future = wait_until_an_element_is_ready(futures);
process(ready_future.get());
Я помню, что такие библиотеки, как libevent, libev и libuv, обладают такими способностями для задач ввода-вывода. Но я не знаю, можно ли это сделать для блокировок/фьючерсов.
Как я думал, чтобы добиться этого, нужно, чтобы фьючерсы вызывали обработчика после его завершения, но в то же время сравнивали и заменяли обработчик на нуль, чтобы другие фьючерсы не могли его назвать. Это требует координации фьючерсов, однако это не может быть сделано для блокировок.
ОБНОВЛЕНИЕ:. Похоже, что это предложение для него для С++ 2x.