首页 > 编程语言 >C++标准库类std::shared_future

C++标准库类std::shared_future

时间:2023-11-27 17:37:24浏览次数:33  
标签:库类 std sfu 异步 get C++ future shared

  std::shared_future是C++11的标准库类,其与std::future的不同是允许多个线程使用,多个线程可以同步共享,同时其又不会阻塞等待异步任务的完成。std::shared_future同样也提供get()方法用于获取异步执行的结果。

#include <iostream>
#include <thread>
#include <future>

void promise_string(std::promise<std::string> &pr)
{
    for (int i = 0; i < 100; i++)
    {
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
        std::cout << "sleep" << std::endl;
    }

    std::string str = "the current function name is: ";
    str.append(__FUNCTION__);
    pr.set_value(str);
}

int main()
{
    std::promise<std::string> pr;
    std::future<std::string> fu(pr.get_future());
    std::shared_future<std::string> sfu(fu.share());

    std::thread t1([&sfu]() {
        std::string str = sfu.get();
        std::cout << "thread1 function is: " << str.c_str() << std::endl;
    });

    std::thread t2([&sfu]() {
        std::string str = sfu.get();
        std::cout << "thread2 function is: " << str.c_str() << std::endl;
    });

    std::async(std::launch::async, [&pr]() {
        promise_string(pr);
    });
    //std::async(std::launch::async, promise_string,ref(pr));

    t1.join();
    t2.join();
    system("pause");
}

  std::promise和std::future用于创建异步任务和获取其结果,通过fu.share()函数创建一个std::share_future对象,用于共享异步任务结果。创建两个线程并发获取共享结果,线程调用sfu.get()获取异步执行结果。

标签:库类,std,sfu,异步,get,C++,future,shared
From: https://www.cnblogs.com/missyou0813/p/17859416.html

相关文章

  • 实验4 现代C++标准库与类模板
    实验任务5TextCoder.hpp#pragmaonce#include<iostream>#include<string>usingnamespacestd;classTextCoder{public:TextCoder(stringtext0):text{text0}{};stringget_ciphertext();stringget_deciphertext();private:s......
  • Modern C++ Starter Kits Share
    初入C++搬砖,在团队中开发实际上很少亲自从零开始搭建C++的完整项目,99%时候都是使用基础架构团队或者CI/CD团队搭建好的框架。这里分享几个配置C++项目的模版,它们一般会涉及三方库管理、格式校准、单元测试、静态检查、Sanitizer配置、CI/CD配置等方面,内容比较完善。BuildSyst......
  • 实验4 现代C++标准库与类模板
    实验任务5#pragmaonce#include<iostream>#include<string>usingnamespacestd;classTextCoder{public:TextCoder()=default;TextCoder(stringstr);stringget_ciphertext();stringget_deciphertext();~TextCoder()=de......
  • Linux安装fastdfs图片服务器
    1、阿里云安装centos7服务器得到用户名密码和ip后用securCrt连接工具链接远程主机2、安装fastdfs图片服务器(1)上传需要的压缩包libfastcommon-common.zip(依赖工具包)  FastDFS_v5.05.tar.gz(源码)  fastdfs-nginx-module_v1.16.tar.gz(与nginx连接的模块)nginx1.8版本  ......
  • C++ Windows版本线程池
    使用:ThreadPoolthreadPool(12);//设定数量threadPool.queue(myFunction,args1,args2,...);//创建任务实现:#include<windows.h>#include<iostream>#include<functional>#include<vector>#include<queue>#include<mutex>#include......
  • C++标准库函数std::async
    1、std::asyncstd::async是C++11的标准库函数,用于创建执行异步任务并返回std::future对象来获取异步执行的结果状态。该函数最简单的用法如下所示:#include<iostream>#include<thread>#include<future>std::stringpromise_string(){for(inti=0;i<200;......
  • C++ Socket网络编程(TCP)
    基于Windows平台的Socket网络编程,用的QT,这个例子里一个服务端和一个客户端,两个应用程序之间进行通信,所以创建两个项目,目录结构如下:直接贴代码:服务端:1//main.cpp2#include<QCoreApplication>3#include<iostream>4#include<QDebug>5#include<cstring>6#i......
  • std::future与std::promise在C++多线程同步与数据共享中的应用
    1、std::promise与std::futurestd::promise与std::future通过配合使用完成数据的同步与共享,两者均是模板类;std::promise存储异步执行的值或异常;std::future提供可供访问的异步执行结果。二者配合使用伪码如下:std::promise<Type>pr;std::future<Type>fu(pr.get_fu......
  • C++聊天集群服务器2
    ​ 总体项目结构如下:一、数据库的封装​ db.h如图代码量不多​ db.cpp:#include"db.h"#include<muduo/base/Logging.h>//数据库配置信息staticstringserver="127.0.0.1";staticstringuser="root";staticstringpassword="123456";st......
  • C++11 后的单例写法
    template<typenameT>classSingleton{public:staticT&getInstance(){staticTt;returnt;}Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;protected:......