多线程编程std::promise,std::future, std::shared_future, std::packaged_task, std::async

本文详细介绍了C++中多线程编程的几个关键组件:std::promise和std::future用于单向数据传递,std::shared_future实现线程间数据共享,std::packaged_task提供数据同步机制,以及std::async用于创建异步任务。每个组件都包含了简介、使用方法和示例,帮助开发者理解如何在实际编程中应用这些工具。
摘要由CSDN通过智能技术生成

std::promise 和 std::future

简介

  std::promise 和 std::future 是 C++ 进行单向数据传递的一种方式。std::promise 是数据的输入端,std::future 是数据的输出端

使用

在线程1中创建一个std::promise对象

std::promise<int> promise;

线程1之前从promiseObj获取std::future对象

std::future<int> future = promise.get_future();

线程1将promiseObj传递给线程2,线程2执行操作后对要传递的值赋值

promise.set_value(45);

线程1可以获取到线程2设置的值,若此时线程2还没有对该值进行设置,那么这个调用将会阻塞,直到线程2在promise对象中对该值进行设置

int val = future.get();
示例
#include <iostream>
#include <thread>
#include <future>
#include <chrono>

int main(int argc, char * argv[])
{
   
    std::promise<int>promise = std::promise<int>();
    std::thread t1 = std::thread([&promise] {
   
        std::cout << "thread running\n";
        std::this_thread::sleep_for(std::chrono::seconds(1));
        // 写入数据,这会唤醒正在等待数据的线程
        promise.set_value(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值