zoukankan      html  css  js  c++  java
  • C++ 异步多线程

    用到 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;
    }
    
  • 相关阅读:
    02 基本介绍
    01 概述 网络分层
    04 可扩展
    Java 注解2
    03 高可用
    重拾安卓_00_资源帖
    JavaUtil_09_通用工具类-01_Hutool
    java支付宝开发-01-沙箱环境接入
    java支付宝开发-00-资源帖
    svn_学习_01_TortoiseSVN使用教程
  • 原文地址:https://www.cnblogs.com/mangoczp/p/13646183.html
Copyright © 2011-2022 走看看