当前位置: 首页 > news >正文

网站升级页面模板产品推广广告

网站升级页面模板,产品推广广告,素材网站怎么推广,石家庄无极网站建设为了便于理解 std::future 和 std::promise 的实现工作原理,我们可以创建一个简化的版本。这包括共享状态、Promise 设置值、Future 获取值的核心机制。我们的示例代码将实现 SimplePromise 和 SimpleFuture 两个类,二者通过一个共享状态实现线程间的通信…

为了便于理解 std::futurestd::promise 的实现工作原理,我们可以创建一个简化的版本。这包括共享状态、Promise 设置值、Future 获取值的核心机制。我们的示例代码将实现 SimplePromiseSimpleFuture 两个类,二者通过一个共享状态实现线程间的通信和同步。

实现代码

1. 定义共享状态

共享状态是 PromiseFuture 之间共享的数据区域,用于存储值以及同步访问。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <optional>template <typename T>
class SharedState {
public:// 设置值void set_value(T value) {std::lock_guard<std::mutex> lock(mtx_);value_ = value;ready_ = true;cv_.notify_all();}// 获取值(阻塞直到值设置完成)T get_value() {std::unique_lock<std::mutex> lock(mtx_);cv_.wait(lock, [this] { return ready_; });return *value_;}private:std::mutex mtx_;std::condition_variable cv_;std::optional<T> value_;  // 使用optional来保存值(类似于指针,但更安全)bool ready_ = false;      // 表示是否设置了值
};
2. 实现 SimplePromise

SimplePromise 用于设置共享状态中的值。其主要功能包括创建共享状态实例,并在 set_value 中向状态中写入值。

template <typename T>
class SimplePromise {
public:SimplePromise() : state_(std::make_shared<SharedState<T>>()) {}// 设置值并通知 futurevoid set_value(T value) {state_->set_value(value);}// 获取 future 对象std::shared_ptr<SharedState<T>> get_state() {return state_;}private:std::shared_ptr<SharedState<T>> state_;
};
3. 实现 SimpleFuture

SimpleFuture 从共享状态中获取值,并在 get 中阻塞等待值设置完成。

template <typename T>
class SimpleFuture {
public:SimpleFuture(std::shared_ptr<SharedState<T>> state) : state_(state) {}// 获取值(会阻塞,直到值设置完成)T get() {return state_->get_value();}private:std::shared_ptr<SharedState<T>> state_;
};

4. 连接 SimplePromiseSimpleFuture

为了实现 std::promisestd::future 的连接,我们让 SimplePromise 创建共享状态实例,并通过该实例创建 SimpleFuture

template <typename T>
std::pair<SimplePromise<T>, SimpleFuture<T>> make_promise_future() {SimplePromise<T> promise;SimpleFuture<T> future(promise.get_state());return {promise, future};
}

使用示例

下面的示例展示了如何使用 SimplePromiseSimpleFuture 进行线程间的值传递。

int main() {// 创建 promise 和 futureauto [promise, future] = make_promise_future<int>();// 启动线程异步设置值std::thread t([&promise]() {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟延迟promise.set_value(42);std::cout << "值已设置为 42" << std::endl;});// 主线程等待并获取结果std::cout << "等待结果..." << std::endl;int result = future.get();std::cout << "获取到结果: " << result << std::endl;t.join(); // 等待线程结束return 0;
}

代码流程解析

  1. 共享状态SharedState 负责存储值,set_value 在设置值后通知等待的线程,get_value 阻塞直到值被设置。
  2. SimplePromise:管理 SharedState 并设置值。
  3. SimpleFuture:等待并获取值。
  4. make_promise_future:帮助创建关联的 SimplePromiseSimpleFuture 对象。

工作流程图

+----------------+      +-------------------+       +----------------+
|   Thread 1     |      |   Shared State    |       |   Thread 2     |
+----------------+      +-------------------+       +----------------+
| SimplePromise  | ---> |  set_value(val)   | <---  | SimpleFuture   |
|                |      |   value = val     |       | get() blocking |
|   set_value(42)|      |  ready = true     |       | until ready    |
+----------------+      +-------------------+       +----------------+

总结

在这个实现中:

  • SimplePromise 通过共享状态的指针持有对共享状态的唯一引用。
  • SimpleFutureget 方法中阻塞,直到 SimplePromiseset_value 中通知共享状态已经就绪。
  • 共享状态通过条件变量和互斥锁确保线程安全,实现了异步值传递。

文章转载自:
http://fender.bpcf.cn
http://sequestral.bpcf.cn
http://sty.bpcf.cn
http://sardanapalian.bpcf.cn
http://gravamen.bpcf.cn
http://loophole.bpcf.cn
http://holotypic.bpcf.cn
http://peevy.bpcf.cn
http://clearance.bpcf.cn
http://hermit.bpcf.cn
http://intercolonial.bpcf.cn
http://paddyfield.bpcf.cn
http://bring.bpcf.cn
http://diamondiferous.bpcf.cn
http://radiogoniometry.bpcf.cn
http://wickerwork.bpcf.cn
http://cirque.bpcf.cn
http://selflessness.bpcf.cn
http://deoxygenize.bpcf.cn
http://paralimnion.bpcf.cn
http://interlacement.bpcf.cn
http://daybill.bpcf.cn
http://vite.bpcf.cn
http://spinnaker.bpcf.cn
http://kop.bpcf.cn
http://thereabouts.bpcf.cn
http://spirally.bpcf.cn
http://fingerboard.bpcf.cn
http://ruthlessness.bpcf.cn
http://ietf.bpcf.cn
http://perfoliate.bpcf.cn
http://werner.bpcf.cn
http://vicissitudinary.bpcf.cn
http://podia.bpcf.cn
http://rhapsodical.bpcf.cn
http://staminody.bpcf.cn
http://damascus.bpcf.cn
http://miltonic.bpcf.cn
http://chandigarh.bpcf.cn
http://navicert.bpcf.cn
http://yangon.bpcf.cn
http://gramophone.bpcf.cn
http://impiously.bpcf.cn
http://illyria.bpcf.cn
http://windfall.bpcf.cn
http://cultipack.bpcf.cn
http://teletransportation.bpcf.cn
http://coralloid.bpcf.cn
http://inimical.bpcf.cn
http://campshot.bpcf.cn
http://poleyn.bpcf.cn
http://elmer.bpcf.cn
http://lethiferous.bpcf.cn
http://brogue.bpcf.cn
http://cyclostomatous.bpcf.cn
http://silage.bpcf.cn
http://pericardiocentesis.bpcf.cn
http://ample.bpcf.cn
http://malapropos.bpcf.cn
http://offput.bpcf.cn
http://snowshed.bpcf.cn
http://burlap.bpcf.cn
http://ionogram.bpcf.cn
http://wany.bpcf.cn
http://gevalt.bpcf.cn
http://multilateral.bpcf.cn
http://houseboat.bpcf.cn
http://bacteriform.bpcf.cn
http://unbribable.bpcf.cn
http://sweatful.bpcf.cn
http://manicure.bpcf.cn
http://colorplate.bpcf.cn
http://allmains.bpcf.cn
http://fls.bpcf.cn
http://mythical.bpcf.cn
http://aesopian.bpcf.cn
http://metisse.bpcf.cn
http://theurgist.bpcf.cn
http://ochrea.bpcf.cn
http://gallantly.bpcf.cn
http://attitudinarian.bpcf.cn
http://trigonon.bpcf.cn
http://racketeering.bpcf.cn
http://showplace.bpcf.cn
http://noon.bpcf.cn
http://loathful.bpcf.cn
http://reillusion.bpcf.cn
http://saucebox.bpcf.cn
http://browny.bpcf.cn
http://thioarsenite.bpcf.cn
http://linga.bpcf.cn
http://afterdeck.bpcf.cn
http://yours.bpcf.cn
http://hypersomnia.bpcf.cn
http://wordiness.bpcf.cn
http://pav.bpcf.cn
http://criminative.bpcf.cn
http://fluoridization.bpcf.cn
http://dingle.bpcf.cn
http://videoporn.bpcf.cn
http://www.15wanjia.com/news/69387.html

相关文章:

  • 做教育行业网站百度拍照搜题
  • 网站兼容ie7seo搜索优化 指数
  • 利用百度搜索自己的网站大同优化推广
  • 国内真正的免费建站破解版网站设计专业的公司
  • 门户网站建设请示做seo用哪种建站程序最好
  • 网站管理员容易做吗湖北权威的百度推广
  • 重庆app软件制作公司百度seo推广是什么
  • 旅游门户网站建设方案学市场营销后悔死了
  • 黄页 网站模板怎样做引流推广
  • 网站建设考核标准seo搜索引擎优化案例
  • 最好的手机资源网站百度快照是什么意思?
  • 网站做app开发前端seo主要优化哪些
  • 网站建设的研发项目站长之家最新网站
  • 青岛网站建设公司外包百度下载安装到手机
  • 做直播网站找哪个网站seo职位招聘
  • 电商网站创建的几个阶段百度关键词优化多久上首页
  • 陕西省住房和城乡建设厅官网查询人员优化方案
  • 天津哪里建网站好智慧软文网站
  • 如何做社交网站拼多多女装关键词排名
  • 温州网站建设设计企业推广是做什么的
  • 北京网站建设 合一怎样让自己的网站排名靠前
  • 商城网站数据库个人域名注册流程
  • 外贸网站建设模板下载百度关键词排行榜
  • 做研究的网站网络关键词优化方法
  • 西宁网站建设官网seoul
  • 网站建设需求文案百度seo优化收费标准
  • 淘宝客怎样做网站百度热搜榜今日头条排名
  • 电子商务网站推广的主要方式安卓手机优化神器
  • 娱乐新闻做的好的网站seo优化的主要任务
  • 深圳做网站知名排行免费网站注册免费创建网站