Ziz*_*Tai 12 c++ multithreading c++11
是否有可能阻止一组锁/期货/任何可阻止的实体,直到其中任何一个准备就绪?我们的想法是:
std::vector<std::future<T>> futures = ...;
auto ready_future = wait_until_an_element_is_ready(futures);
process(ready_future.get());
Run Code Online (Sandbox Code Playgroud)
我记得像libevent,libev和libuv这样的库具有IO任务的这种能力.但我不知道这些是否可以用于锁/期货.
我想到的一种方法就是让期货在完成后调用一个处理程序,但同时将处理程序比较并交换为null,这样其他期货就不能调用它.然而,这需要协调期货,因此无法对锁进行.
更新:似乎有一个针对C++ 2x 的提议.
如果您有可用的增强功能,其线程功能远远超过标准库.
这将是在c ++ 17之后的情况,以及事物的外观,即使在c ++ 20之后.
#include <future>
#include <vector>
#define BOOST_THREAD_VERSION 4
#include <boost/thread.hpp>
void wait_for_any(std::vector<boost::future<void>> & v)
{
boost::wait_for_any(std::begin(v), std::end(v));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |