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

广州一起做网店官网内蒙古seo

广州一起做网店官网,内蒙古seo,深圳设计公司十大排名,网至普的营销型网站建设异步并发——async future packaged_task promise 1.async、future 是C11引入的一个函数模版,用于异步执行一个函数,并返回一个future对象,表示异步操作的结果。使用 async 可以方便地进行异步编程,避免了手动创建线程和管理线程…

异步并发——async future packaged_task promise

1.async、future

是C++11引入的一个函数模版,用于异步执行一个函数,并返回一个future对象,表示异步操作的结果。使用 async 可以方便地进行异步编程,避免了手动创建线程和管理线程的麻烦。 

代码参考:

#include<iostream>
#include<future>
#include<thread>
using namespace std;int func() {int i = 0;for (int j = 0; j < 1000; ++j) {i++;}return i;
}int main() {future<int> future_result = async(launch::async, func);cout << func() << endl;cout << future_result.get() << endl;return 0;
}

这个例子中,使用了async函数异步执行了一个耗时的计算,这个计算可以在另一个线程中执行,不会阻塞主线程。同时,我们也避免了手动创建线程和管理线程的麻烦。

2.packaged_task 

在C++中,packaged_task是一个类模板,用于将一个可调用对象(如函数、函数对象或Lambda表达式)封装成一个异步撮作,并返回一个std::future对象,表示异步操作的结果。packaged_task可以方便地将一个函数或可调用对象转换成一个异步操作,供其他线程使用。

代码参考:

#include<iostream>
#include<future>
#include<thread>
using namespace std;int func() {int i = 0;for (int j = 0; j < 1000; ++j) {i++;}return i;
}int main() {packaged_task<int()> task(func);future<int>future_result = task.get_future();thread t1(move(task));cout << func() << endl;t1.join();cout << future_result.get() << endl;return 0;
}

在这个例子中,我们成功地将一个函数封装成了一个异步操作,并在其他线程中执行。通过packaged_task和future对象,我们可以方便地实现异步编程,使得代码更加简洁和易于维护。 

3.promise

在C++中,promise是一个类模版,用于在一个线程中产生一个值,并在另一个线程中获取这个值。promise通常与future和async一起使用,用于实现异步编程。

#include<iostream>
#include<future>
using namespace std;void fun(promise<int>& f) {f.set_value(1000); //传入数据
}int main() {promise<int> f;auto future_result = f.get_future();thread t1(fun, ref(f));t1.join();cout << future_result.get() << endl;return 0;}

实现一个数据的传入和使用。 


原子操作 atomic

`std::atomic` 是 C++11 标准库中的一个模板类,用于实现多线程环境下的原子操作。它提供了一种线程安全的方式来访问和修改共享变量,可以避免多线程环境中的数据竞争问题。

`std::atomic` 的使用方式类似于普通的 C++ 变量,但是它的操作是原子性的。也就是说,在多线程环境下,多个线程同时对同一个 `std::atomic` 变量进行操作时,不会出现数据竞争问题。

以下是一些常用的 `std::atomic` 操作:

  1. `load()`:将 `std::atomic` 变量的值加载到当前线程的本地缓存中,并返回这个值。
  2. `store(val)`:将 `val` 的值存储到 `std::atomic` 变量中,并保证这个操作是原子性的。
  3. `exchange(val)`:将 `val` 的值存储到 `std::atomic` 变量中,并返回原先的值。
  4. `compare_exchange_weak(expected, val)` 和 `compare_exchange_strong(expected, val)`:比较 `std::atomic` 变量的值和 `expected` 的值是否相同,如果相同,则将 `val` 的值存储到 `std::atomic` 变量中,并返回 `true`;否则,将 `std::atomic` 变量的值存储到 `expected` 中,并返回 `false`。

代码参考:

#include<iostream>
#include<thread>
#include<atomic>
using namespace std;//原子量
atomic<int> sharted_data = 0;
void func() {for (int i = 0; i < 10000; ++i) {sharted_data++; //对原子量数据操作是线程安全的 }
}
int main() {thread t1(func);thread t2(func);t1.join();t2.join();cout << sharted_data << endl;return 0;
}
http://www.bjxfkj.com.cn/article/100232.html

相关文章:

  • 企梦网站建设产品营销方案策划
  • 网站开网站开发设计公司周口网站制作
  • wordpress 关闭搜索功能聊城seo培训
  • 政府网站建设明细报价表论坛seo网站
  • 西宁网站建设搜q479185700口碑营销的好处
  • 门户网站建设情况汇报种子搜索
  • 跨境电子商务是干什么的willfast优化工具下载
  • 网站建设提升医院信息化水平佛山优化网站关键词
  • 浙江省建设银行网站市场营销策划方案
  • 我要下载中国建设网站seo顾问服务 品达优化
  • 国内产品设计网站南宁网站关键词推广
  • 可以用什么做网站登录页面免费网页在线客服制作
  • 福建金融公司网站建设网络营销怎么做推广
  • 上门定制衣服哪家好seo免费优化公司推荐
  • 学校网站管理系统免费版seo描述是什么
  • 一步一步教你做网站后台视频app推广公司怎么对接业务
  • 网站营销推广计划书文案发布平台
  • 建站优化信息推广宁波seo怎么做推广渠道
  • 做网站都需要哪些费用深圳网络公司推广公司
  • 公司制做网站seo招聘
  • wordpress找不到xml南宁优化网站网络服务
  • php制作网页文章优化关键词排名
  • 做网站需要写程序关键词排名怎么查
  • 建公司网站报价seo关键词排名优化技巧
  • css做网站产品推广的渠道有哪些
  • 网站的建设论文定制网站多少钱
  • 大型做网站的公司有哪些东营优化路网
  • 在阿里云做网站教程深圳网站建设服务
  • 江苏科技大学新校区建设网站站长之家 seo查询
  • 橙子建站验证码我输了咋办seo的基本步骤是什么