做网站用c语言吗,苏州专业网站建设设计公司排名,网站在工信部备案查询,长沙哪家网络公司做网站好std::condition_variable 和 std::future 的区别#xff1a;
用途不同#xff1a;
std::condition_variable#xff1a;
就好比是一把魔法门#xff0c;有两个小朋友#xff0c;一个在门这边#xff0c;一个在门那边。门上贴了一张纸#xff0c;写着“开心时可以进来…std::condition_variable 和 std::future 的区别
用途不同
std::condition_variable
就好比是一把魔法门有两个小朋友一个在门这边一个在门那边。门上贴了一张纸写着“开心时可以进来”。现在门这边的小朋友要等着看门那边的小朋友什么时候准备好准备好了就告诉门这边可以进来了。门这边的小朋友就用 std::condition_variable 等待门那边小朋友的通知门那边小朋友准备好了就通知过来。
std::future
这就像是委托一个任务给一个小助手。你告诉小助手“嘿你去超市买一瓶果汁等你回来告诉我。”这里你是主线程小助手是异步线程你用 std::future 去拿到小助手的结果看他是否买到了果汁。
例子
std::condition_variable
#include iostream
#include thread
#include mutex
#include condition_variablestd::mutex mtx;
std::condition_variable cv;
bool isReady false;void friend1() {std::this_thread::sleep_for(std::chrono::seconds(2));{std::lock_guardstd::mutex lock(mtx);isReady true; // 小朋友在门那边准备好了}cv.notify_one(); // 通知门这边的小朋友
}void friend2() {std::unique_lockstd::mutex lock(mtx);cv.wait(lock, [] { return isReady; }); // 等待门那边的小朋友通知std::cout Friend 2: Lets go inside and play! std::endl;
}int main() {std::thread t1(friend1);std::thread t2(friend2);t1.join();t2.join();return 0;
}std::future
#include iostream
#include futureint buyJuice() {std::this_thread::sleep_for(std::chrono::seconds(2));return 1; // 假设小助手成功买到果汁
}int main() {std::futureint result std::async(buyJuice);std::cout Main thread: Waiting for the assistant to come back with juice... std::endl;int juice result.get(); // 阻塞等待小助手的结果std::cout Main thread: Got the juice! Its a refreshing juice std::endl;return 0;
}为什么不能用条件变量替代期望
如果我们用 std::condition_variable 代替 std::future就像用等待通知的方式得知小助手是否买到果汁。这样你就必须一直等着无法做其他事情。而 std::future 则允许你去做其他事情等果汁买好了再回来拿。 总的来说它们分别解决不同的问题std::condition_variable 用于等待通知而 std::future 用于异步任务的结果获取。