std::future 是一個 C++11 引入的標準庫類,可用於非同步獲取計算結果。通常情況下,std::future 可以通過 get() 函數來等待非同步操作完成,並獲取其結果。 如果需要等待多個非同步操作完成並獲取它們各自的結果,可以使用 std::future 的姊妹類 std::shared_ ...
std::future 是一個 C++11 引入的標準庫類,可用於非同步獲取計算結果。通常情況下,std::future 可以通過 get() 函數來等待非同步操作完成,並獲取其結果。 如果需要等待多個非同步操作完成並獲取它們各自的結果,可以使用 std::future 的姊妹類 std::shared_future 來實現。 std::shared_future 與 std::future 類似,不同之處在於它可以被多個線程同時訪問和等待。因此,可以將多個 std::shared_future 對象保存到一個容器中,然後使用 std::shared_future 的成員函數 wait() 或 get() 等待這些非同步操作完成,並獲取它們的結果。 例如,假設有兩個非同步任務 task1 和 task2,它們分別返回類型為 T1 和 T2 的結果。可以使用以下代碼來創建 std::shared_future 並保存到一個 vector 容器中:
查看代碼
std::promise<T1> promise1;
std::future<T1> future1 = promise1.get_future();
std::shared_future<T1> shared_future1 = future1.share();
std::promise<T2> promise2;
std::future<T2> future2 = promise2.get_future();
std::shared_future<T2> shared_future2 = future2.share();
std::vectorstd::shared_future<void> futures;
futures.push_back(shared_future1);
futures.push_back(shared_future2);
接下來,可以使用 std::shared_future 的成員函數 wait() 或 get() 等待這些非同步操作完成,並獲取它們的結果。例如:
for (const auto& f : futures) {
f.wait();
}
T1 result1 = future1.get();
T2 result2 = future2.get();
在上面的代碼中,wait() 函數等待所有非同步操作完成,而 get() 函數分別獲取每個非同步任務的結果。