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

C++并发与多线程(高级函数async)

async

在 C++ 中,async 关键字用于实现异步编程,它允许你定义异步操作,这些操作可以在后台执行,而不会阻塞当前线程。这是 C++11 引入的特性,与 std::async 函数和 std::future 类一起使用。与thread函数模板的区别在于async可以有返回值,thread无返回值。

简单入门

// ConsoleApplication10.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <thread>
#include <mutex>
#include <cstdint>
#include <future>

#include <list>
using  namespace std;



int mythread()
{
	cout << "func " << "  threadid = " << this_thread::get_id() << " start " << endl << endl;
	std::chrono::milliseconds dura(3000);
	std::this_thread::sleep_for(dura);
	cout << "func " << "  threadid = " << this_thread::get_id() <<" end " << endl << endl;
	return 5;

}

int main()
{
	cout << "=========================================== " << " threadid = " << this_thread::get_id() << endl << endl;
	std::future<int> ret =  std::async(mythread);
	cout << ret.get() << endl; //堵塞获取值,注意:get函数只能调用一次,不能多次调用
	cout << "=========================================== " << " threadid = " << this_thread::get_id() << endl << endl;

	return 0;
}



中级过度

// ConsoleApplication10.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <thread>
#include <mutex>
#include <cstdint>
#include <future>

#include <list>
using  namespace std;


class A
{
public:
	int mythread(int myint)
	{
		cout << "func " << "  threadid = " << this_thread::get_id() << " start " << endl << endl;
		cout << "myint = " << myint << endl;
		std::chrono::milliseconds dura(3000);
		std::this_thread::sleep_for(dura);
		cout << "func " << "  threadid = " << this_thread::get_id() << " end " << endl << endl;
		return 5;

	}
};


int main()
{
	cout << "=========================================== " << " threadid = " << this_thread::get_id() << endl << endl;
	A a;
	int num = 100;

	std::future<int> ret =  std::async(&A::mythread,&a,num);//传入可调用对象 &a == std::ref(a)都是引用传递 相当于传递了this指针。
	cout << ret.get() << endl; //堵塞获取值

	cout << "=========================================== " << " threadid = " << this_thread::get_id() << endl << endl;

	return 0;
}



其他线程使用可以参数我主页中的 C语言:高级并发操作(线程)文章。


http://www.kler.cn/a/442234.html

相关文章:

  • 计算机网络 (47)应用进程跨越网络的通信
  • 小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2
  • PHP智慧小区物业管理小程序
  • Go入门学习笔记
  • 《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级的封装(包括调用Json文件))
  • [每周一更]-(第127期):Go新项目-Gin中使用超时中间件实战(11)
  • 【深度学习基础】Windows实时查看GPU显存占用、功耗、进程状态
  • USB-A/C 2in1接口的未来应用前景分析
  • JAVA入门:使用IDE开发
  • 多模态检索增强生成
  • HarmonyOS 实时监听与获取 Wi-Fi 信息
  • 解锁Vue组件的奇妙世界
  • 【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
  • 算法,递归和迭代
  • 交换机堆叠和集群
  • 线性池学习
  • vue登录成功之后的token处理
  • 【JS/TS鼠标气泡跟随】文本提示 / 操作提示
  • access数据库代做/mysql代做/Sql server数据库代做辅导设计服务
  • Jackson @JsonRootName 注解
  • Python | 虚拟环境04 - Qt Creator设置Python虚拟环境
  • HarmonyOS Next开发工具DevEco Studio介绍:ASan与TSan检测根治你的C++恐惧症
  • 使用k6进行kafka负载测试
  • 允许某段网络访问Linux服务器上的MariaDB
  • Excel技巧:使用PowerQuery批量提取文件名