首页 > 编程语言 > 详细

C++ 异步多线程

时间:2020-09-10 16:31:14      阅读:63      评论:0      收藏:0      [点我收藏+]

用到 C++ future 库,代码如下:

#include <iostream>
#include <future>
#include <unistd.h>
using namespace std;

double f(double a,double b){
    double c = a+b;
    sleep(3);
    return c;
}

int main(){
    double a=1.0,b=2.1;
    future<double> fu = async(f,a,b);
    cout<<"..."<<endl;
    cout<<"result:"<<fu.get()<<endl;
    return 0;
}

编译方式:

g++ -std=c++11 async.cpp -lpthread -o demo

future 无法实现多个线程等待同一个异步线程结果,future 对象调用 get 后会转移控制权,导致只有一个线程可以获取异步线程的返回值,要解决这个问题可以用 shared_future,代码如下:

#include <iostream>
#include <future>
#include <unistd.h>
using namespace std;

double f(double a,double b){
    double c = a+b;
    sleep(3);
    return c;
}

int main(){
    double a=1.0,b=2.1;
    shared_future<double> fu = async(f,a,b);
    shared_future<double> c1 = async(f,a,fu.get());
    shared_future<double> c2 = async(f,a,fu.get());
    cout<<"..."<<endl;
    cout<<"result:"<<c1.get()<<endl;
    cout<<"result:"<<c2.get()<<endl;
    cout<<"result:"<<fu.get()<<endl;
    return 0;
}

C++ 异步多线程

原文:https://www.cnblogs.com/mangoczp/p/13646183.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!