C++多线程学习(一)
(一)几个基础的thread函数
(1) thread 线程名(函数入口) //创建了线程,线程执行起点入口为函数,线程开始执行。
(2) join():阻塞,阻塞主线程,让主线程等待子线程执行完毕,然后子线程和主线程汇合完毕,主线程往下去走。
(3) detach():分离主线程和子线程。使用时应当注意
a.若传递临时对象,一定要注意,避免主线程结束了,子线程还在调用临时对象。
b.如果传递类对象,避免隐式类型转换。全部都在创建线程这一行就构建出临时对象来。
(4) joinable():判断是否可以成功使用join()或者detach(),返回true或者false
(二)构造一个线程的方式
(1)直接使用函数创建
#include <iostream> #include <thread> using namespace std; void myPrint() { cout << "我的线程开始运行" << endl; cout << "我的线程运行完毕" << endl; return; } int main() { thread myThread(myPrint); myThread.join(); if (myThread.joinable()) { cout << "可以调用可以调用join()或者detach()" << endl; } else { cout << "不能调用可以调用join()或者detach()" << endl; } cout << "Hello World!" << endl; return 0; }
(2)调用仿函数创建
class Ta { public: void operator()() //不能带参数 { cout << "我的线程开始运行" << endl; //------------- //------------- cout << "我的线程运行完毕" << endl; } }; //main函数里的: Ta ta; thread myThread(ta); myThread.join();
(3)lambda表达式创建
//main函数中 auto lambdaThread = [] { cout << "我的线程开始执行了" << endl; //------------- //------------- cout << "我的线程开始执行了" << endl; }; thread myThread(lambdaThread); myThread.join();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类