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

交友软件网站建设北京网站制作培训

交友软件网站建设,北京网站制作培训,酒店网站建设注意什么,wordpress pdf电子书为了便于理解 std::future 和 std::promise 的实现工作原理#xff0c;我们可以创建一个简化的版本。这包括共享状态、Promise 设置值、Future 获取值的核心机制。我们的示例代码将实现 SimplePromise 和 SimpleFuture 两个类#xff0c;二者通过一个共享状态实现线程间的通信…为了便于理解 std::future 和 std::promise 的实现工作原理我们可以创建一个简化的版本。这包括共享状态、Promise 设置值、Future 获取值的核心机制。我们的示例代码将实现 SimplePromise 和 SimpleFuture 两个类二者通过一个共享状态实现线程间的通信和同步。 实现代码 1. 定义共享状态 共享状态是 Promise 和 Future 之间共享的数据区域用于存储值以及同步访问。 #include iostream #include thread #include mutex #include condition_variable #include optionaltemplate typename T class SharedState { public:// 设置值void set_value(T value) {std::lock_guardstd::mutex lock(mtx_);value_ value;ready_ true;cv_.notify_all();}// 获取值阻塞直到值设置完成T get_value() {std::unique_lockstd::mutex lock(mtx_);cv_.wait(lock, [this] { return ready_; });return *value_;}private:std::mutex mtx_;std::condition_variable cv_;std::optionalT value_; // 使用optional来保存值类似于指针但更安全bool ready_ false; // 表示是否设置了值 };2. 实现 SimplePromise SimplePromise 用于设置共享状态中的值。其主要功能包括创建共享状态实例并在 set_value 中向状态中写入值。 template typename T class SimplePromise { public:SimplePromise() : state_(std::make_sharedSharedStateT()) {}// 设置值并通知 futurevoid set_value(T value) {state_-set_value(value);}// 获取 future 对象std::shared_ptrSharedStateT get_state() {return state_;}private:std::shared_ptrSharedStateT state_; };3. 实现 SimpleFuture SimpleFuture 从共享状态中获取值并在 get 中阻塞等待值设置完成。 template typename T class SimpleFuture { public:SimpleFuture(std::shared_ptrSharedStateT state) : state_(state) {}// 获取值会阻塞直到值设置完成T get() {return state_-get_value();}private:std::shared_ptrSharedStateT state_; };4. 连接 SimplePromise 和 SimpleFuture 为了实现 std::promise 和 std::future 的连接我们让 SimplePromise 创建共享状态实例并通过该实例创建 SimpleFuture。 template typename T std::pairSimplePromiseT, SimpleFutureT make_promise_future() {SimplePromiseT promise;SimpleFutureT future(promise.get_state());return {promise, future}; }使用示例 下面的示例展示了如何使用 SimplePromise 和 SimpleFuture 进行线程间的值传递。 int main() {// 创建 promise 和 futureauto [promise, future] make_promise_futureint();// 启动线程异步设置值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; }代码流程解析 共享状态SharedState 负责存储值set_value 在设置值后通知等待的线程get_value 阻塞直到值被设置。SimplePromise管理 SharedState 并设置值。SimpleFuture等待并获取值。make_promise_future帮助创建关联的 SimplePromise 和 SimpleFuture 对象。 工作流程图 ---------------- ------------------- ---------------- | Thread 1 | | Shared State | | Thread 2 | ---------------- ------------------- ---------------- | SimplePromise | --- | set_value(val) | --- | SimpleFuture | | | | value val | | get() blocking | | set_value(42)| | ready true | | until ready | ---------------- ------------------- ----------------总结 在这个实现中 SimplePromise 通过共享状态的指针持有对共享状态的唯一引用。SimpleFuture 在 get 方法中阻塞直到 SimplePromise 在 set_value 中通知共享状态已经就绪。共享状态通过条件变量和互斥锁确保线程安全实现了异步值传递。
http://www.tj-hxxt.cn/news/227337.html

相关文章:

  • 企业网站设计图指定关键词seo报价
  • 网站建设与组织管理注册安全工程师通过率
  • 如何选网站服务器东莞市赢网网络科技有限公司
  • jquery电子商务网站模板房地产管理系统
  • 网站开发账务处理慧聪网是干什么的
  • 海口建网站装潢设计图片
  • 上海服装网站建设武进网站建设基本流程
  • 营销比较成功的企业如何优化seo
  • 石家庄网站建设推广公司报价礼品工艺品网站建设
  • 金融网站织梦模板营销计划书7个步骤
  • 济南网络优化网站seo是什么服务
  • 公司建设网站策划书it外包数据
  • 免费代理上网网站网站忘记密码功能
  • 一个用vue做的网站百度登录账号首页
  • 为什么两学一做进不去网站自己做开箱网站
  • 无锡seo网站推广百度推广介绍
  • 中国最权威的网站排名百度账号免费注册
  • 智能自助建站系统源码深圳网站建设设计平台
  • 彩票娱乐网站建设开发Sage WordPress商城主题
  • 厦门百城建设有限公司网站哪些网站有好的营销案例
  • 天猫做网站图文制作app
  • thinkphp做网站教程广州市平安建设 网站
  • 广东工程建设监理有限公司网站建设网站时的故障分类
  • 家庭厨房做外卖网站什么网站有做面条的app
  • 大连网站设计制作方案中药材初加工平台
  • 福建省建设厅网站施工员查询成都最新防疫政策
  • 餐饮类网站建设达到的作用甘肃建设体网站
  • 公司网站销售平台建设费分录西安二次感染最新消息
  • 国家免费技能培训有哪些怎么做网站标题优化
  • 潍坊网页模板建站韶关手机网站建站