首页 > 其他分享 >std::promise

std::promise

时间:2024-03-26 11:46:36浏览次数:27  
标签:std promiseObj 状态 future promise 共享

std::promise的作用就是提供一个不同线程之间的数据同步机制,它可以存储一个某种类型的值,并将其传递给对应的 future, 即使这个 future 与 promise 不在同一个线程中也可以安全的访问到这个值。

std::promise<int> promiseObj;

可以通过get_future()来获取与该 promise 对象相关联的 future 对象,调用该函数之后,两个对象共享相同的共享状态(shared state)。set_value()可以设置共享状态的值,此后 promise 的共享状态标志变为 ready。

  • promise 对象是异步 Provider,它可以在某一时刻设置共享状态的值。
  • future 对象可以异步返回共享状态的值,或者在必要的情况下阻塞调用者并等待共享状态标志变为 ready,然后才能获取共享状态的值。

future 与 promise 配合使用的示例:

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

void initiazer(std::promise<int> * promObj)
{
    std::cout<<"Inside Thread"<<std::endl;     
    promObj->set_value(35);
}

int main()
{
    std::promise<int> promiseObj;
    std::future<int> futureObj = promiseObj.get_future();
    std::thread th(initiazer, &promiseObj);
    std::cout<<futureObj.get()<<std::endl;
    th.join();
    return 0;
}

 

标签:std,promiseObj,状态,future,promise,共享
From: https://www.cnblogs.com/love-9/p/18096286

相关文章

  • std::atomic 使用
    std::atomic(原子变量)参考文章包括:C++原子变量atomic详解-知乎(zhihu.com)C++中的原子变量(std::atomic)使用指南_std::atomic-CSDN博客cplusplus.com/reference/atomic/atomic/原子变量是C++11中用于多线程编程的便捷工具(同步机制)之一.其提供了一种线程安全的方式来......
  • std::async
    C++11提供了异步接口std::async,通过这个异步接口可以很方便的获取线程函数的执行结果。std::async会自动创建一个线程去调用线程函数,它返回一个std::future,这个future中存储了线程函数返回的结果,当我们需要线程函数的结果时,直接从future中获取,非常方便。但是我想说的是,其实std::as......
  • std::unique_lock
    C++11标准中定义了另外一个与MutexRAII相关类unique_lock,该类与lock_guard类相似,也很方便线程对互斥量上锁,但它提供了更好的上锁和解锁控制。unique_lock对象以独占所有权的方式(uniqueowership)管理mutex对象的上锁和解锁操作,所谓独占所有权,就是没有其他的unique_loc......
  • std::lock_guard 介绍
    std::lock_gurad是C++11中定义的模板类。定义如下:template <class Mutex>class lock_guard;lock_guard对象通常用于管理某个锁(Lock)对象,因此与MutexRAII相关,方便线程对互斥量上锁,即在某个lock_guard对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而lo......
  • std::vector 和 std::list 区别
    std::vector和std::list区别?std::vector和std::list是C++标准库中两种不同的容器类型,它们之间有以下几个主要区别:存储结构:std::vector是连续内存空间上的动态数组,元素在内存中是连续存储的。std::list是基于双向链表实现的,元素在内存中是非连续存储的。......
  • 自己编译RustDesk,并将自建ID服务器和key信息写入客户端
    前言:搭建RustDesk编译环境    今天总算是把编译环境给折腾清楚了,编译出来了至少能用,但说不上好用,问题还不少,官方的客户端就是要手工填写ID服务器地址和key才可以用,而且还容易被别人白嫖你搭建的服务器,当然如果拿到你编译后的客户端,也是存在被白嫖的可能。这方面还没......
  • JavaScript之Promise补充与Dom操作
    Promise过程分析//按照顺序依次引入a-d.js,最后打印加载完毕load('a.js').then(()=>{returnload('b.js')//load方法返回Pomise对象//但是没有把这个对象返回//所以这个函数没有返回值//then方法会提供一个空对象作为返......
  • jquery ajax对promise封装
    封装://封装ajax请求成promise,方便循环请求数据asyncfunctioncrateAjax(url,param){returnnewPromise((resolve,reject)=>{$.ajax({url:url,type:"post",data:JSON.stringify(param),dataType:&......
  • promise与async/await连用全部请求结束时获取请求结果
    async/await获取请求结束时机,拿到结果(非promise类型的结果)constgetModalData=useCallback(async()=>{constresult=awaitsendRequest(currentCabinet)setData(result)},[currentCabinet])定义promise:因为此处的请求方法结果返回的时promise......
  • std::promise返回的是future对象
    在C++中,std::promise对象调用get_future()方法返回一个std::future对象,而不是指针、引用或其他类型的对象。std::future对象用于获取与std::promise对象相关联的异步操作的结果。std::promise和std::future是C++标准库中的一部分,用于处理异步操作的结果。std::promise对象可以在......