一、引言
随着多核处理器的普及,多线程编程成为提升程序性能的重要手段。C++11标准正式引入了线程库,提供了跨平台的多线程支持,极大方便了多线程程序开发。
本文将详细介绍C++多线程基础、同步机制及实战案例,帮助你掌握现代C++多线程编程。
二、C++多线程基础
1. 线程的创建
C++11中通过std::thread创建线程:
cpp复制编辑void func() {
std::cout << "线程执行中\n";
}
int main() {
std::thread t(func);
t.join(); // 等待线程结束
return 0;
}
2. 线程参数传递
线程函数可带参数:
cpp复制编辑void printNum(int x) {
std::cout << x << std::endl;
}
std::thread t(printNum, 10);
三、线程同步机制
1. 互斥锁(mutex)
保证同一时刻只有一个线程访问共享资源。
cpp复制编辑std::mutex mtx;
mtx.lock();
// 访问共享资源
mtx.unlock();
更安全的方式:
cpp复制编辑std::lock_guard<std::mutex> lock(mtx);
2. 条件变量(condition_variable)
线程间通信,等待某条件发生。
cpp复制编辑std::condition_variable cv;
std::mutex mtx;
bool ready = false;
void waitFunc() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [](){ return ready; });
// 继续执行
}
四、线程间数据共享与竞态条件
多个线程访问同一数据可能导致数据竞态,必须用同步工具保护。
五、原子操作
std::atomic提供无锁原子操作,适合简单变量的并发访问。
cpp复制编辑std::atomic<int> counter(0);
counter++;
六、线程局部存储(thread_local)
变量在每个线程中独立存在,避免竞态。
cpp复制编辑thread_local int var = 0;
七、实战案例:多线程计算数组元素和
cpp复制编辑#include <iostream>
#include <thread>
#include <vector>
#include <numeric>
void partialSum(const std::vector<int>& arr, int start, int end, int& result) {
result = std::accumulate(arr.begin() + start, arr.begin() + end, 0);
}
int main() {
std::vector<int> data(1000000, 1);
int sum1 = 0, sum2 = 0;
std::thread t1(partialSum, std::cref(data), 0, data.size()/2, std::ref(sum1));
std::thread t2(partialSum, std::cref(data), data.size()/2, data.size(), std::ref(sum2));
t1.join();
t2.join();
std::cout << "总和:" << sum1 + sum2 << std::endl;
return 0;
}
八、线程池简介
线程池管理固定数量线程,复用线程提升性能。C++标准库尚无内置线程池,但可自行实现或使用第三方库。
九、C++20协程简介
协程是轻量级线程,C++20开始支持,适合异步编程。它允许函数挂起和恢复,简化异步代码。
十、总结
多线程是现代C++程序性能优化的关键。掌握std::thread、同步机制及并发编程模式,能写出高效、安全的并发程序。未来协程等新技术将进一步简化多线程开发。
来源:资源内容
来源:说明通道
来源:入口内容
来源:信息页跳转
来源:链接内容
来源:文档渠道
来源:内容说明
来源:文章获取
来源:详情跳转
来源:资料通道
来源:页面获取
来源:信息数据
来源:信息内容
来源:文档页
来源:资料页
来源:数据详情
来源:渠道文档
来源:浏览资源
来源:详情资源
来源:链接渠道
来源:资源获取
来源:出处入口
来源:文档路径
来源:参考详情
来源:阅读入口
来源:文段通道
来源:文页信息
来源:文稿资源
来源:文章数据
来源:资源页
来源:参考条目
来源:访问页面
来源:资料页跳转
来源:参考出处
来源:信息源
来源:原始资料
来源:相关内容
来源:参考路径
来源:了解文档
来源:资料通道页
来源:文章索引
来源:浏览条目
来源:说明信息
来源:文章文档
来源:阅读资料
来源:条目信息
来源:展示内容
来源:入口通道
来源:文稿页
来源:条目跳转
来源:信息页链接
来源:访问内容
来源:参考页面
来源:内容素材
来源:文档条目
来源:路径说明
来源:资源来源
来源:展示页面
来源:资源链接
来源:内容段落
来源:入口来源
来源:信息获取
来源:资源入口
来源:条目内容
来源:文章渠道
来源:入口跳转
来源:资源文稿
来源:资料索引
来源:获取详情
来源:数据源
来源:渠道入口
来源:资料数据
来源:资源片段
来源:资料展示
来源:内容文章
来源:内容段
来源:条目展示
来源:文段入口
来源:素材链接
来源:条目资源
来源:详情入口
来源:素材内容
来源:段落入口
来源:入口条目
来源:链接渠道页
来源:数据详情页
来源:文页通道
来源:文档原文
来源:原文页
来源:文稿入口
来源:资源数据页
来源:条目文献
来源:段落链接
来源:信息片段
来源:信息展示
来源:详情页面
来源:源文入口
来源:语段入口
来源:资源页面
来源:参考链接
来源:数据片段
来源:片段详情
来源:入口数据
来源:访问路径
来源:数据展示
来源:段落数据
来源:参考信息页
来源:信息源页
来源:条目索引
来源:条目片段
来源:索引入口
来源:路径内容
来源:素材页面
来源:路径详情
来源:资源说明页
来源:文稿详情
来源:文档信息
来源:链接信息
来源:获取数据
来源:参考数据
来源:访问展示
来源:入口展示
来源:访问素材
来源:入口文页
来源:参考段落
来源:内容库
来源:素材页
来源:素材数据
来源:语料内容
来源:跳转素材
来源:资料库
来源:文库链接
来源:渠道内容
来源:渠道说明
来源:展示页
来源:访问素材页
来源:素材入口
来源:文档链接
来源:数据通道
来源:信息路径
来源:素材展示
来源:文稿展示
来源:内容渠道
来源:文段展示
来源:素材说明
来源:素材展示页
来源:资源通道页
来源:路径资源
来源:获取原文
来源:索引内容页
来源:信息入口页
来源:资源页跳转
来源:内容链接页
来源:资源展示页
来源:信息展示页
来源:资料路径
来源:获取文章
来源:内容参考页
来源:文章跳转页
来源:素材入口页
来源:文档展示页
来源:渠道跳转页
来源:数据资源页
来源:段落展示页
来源:语段展示页
来源:跳转资料页
来源:入口信息页
来源:展示资源页
来源:资源路径
来源:片段展示页
来源:资料展示页
来源:内容说明页
来源:数据页链接
来源:链接资料页
来源:展示内容页
来源:通道入口页
来源:原文展示页
来源:数据链接页
来源:内容链接通道
来源:内容展示页
来源:跳转信息页
来源:说明内容页
来源:文章展示页
来源:素材链接页
来源:参考展示页
来源:信息跳转页
来源:渠道链接页
来源:详情展示页
来源:展示文档页
来源:信息数据页
来源:素材数据页
来源:片段链接页
来源:资料跳转通道
来源:展示文稿页
来源:信息渠道页
来源:渠道数据页
来源:条目展示页
来源:文库入口页
来源:数据说明页
来源:内容跳转页
来源:资料浏览
来源:内容索引
来源:路径页面
来源:资源概览
来源:参考素材
来源:文章链接
来源:原始文段
来源:文库索引
来源:资料路径页
来源:内容引用
来源:资源文段
来源:跳转资料
来源:链接入口页
来源:资料内容页
来源:文档访问
来源:资料详情页
来源:文库页面
来源:内容入口页
来源:段落资源
来源:条目链接
来源:内容详情页
来源:入口文库
来源:素材文段
来源:片段页面
来源:段落素材
来源:素材参考
来源:链接条目页
来源:文章内容页
来源:展示信息页
来源:参考段落页
来源:原始片段
来源:片段入口页
来源:文段链接页
来源:数据引用
来源:数据参考页
来源:原始内容页
来源:资源引用
来源:链接参考页
来源:资料引用
来源:入口索引页
来源:资源参考页
来源:展示入口页
来源:跳转链接页
来源:详情路径页
来源:路径通道页
来源:说明链接页
来源:索引文段
来源:入口文段
来源:内容引用页
来源:资源访问页
来源:访问详情页
来源:资料详情信息
来源:段落条目页
来源:说明通道页
来源:文章片段页
来源:展示索引页
来源:内容资源页
来源:资源页通道
来源:跳转索引页
来源:获取链接
来源:链接获取页
来源:内容详情信息
来源:原始数据页
来源:参考片段
来源:条目内容页
来源:段落跳转页
来源:段落链接通道
来源:条目引用
来源:内容提要页
来源:资源浏览页
来源:资料获取页
来源:片段索引页
来源:文库参考
来源:说明文章
来源:入口展示页
来源:信息获取页
来源:内容通道页
来源:说明参考页
来源:资料文稿页
来源:参考内容页
来源:通道展示页
来源:页面片段
来源:素材索引页
来源:通道资料页
来源:链接文章页
来源:展示说明页
来源:资料语段
来源:资源段落
来源:资料语料页
来源:信息详情页
来源:参考展示内容
来源:资料数据页
来源:通道跳转页
来源:原始数据内容
来源:说明资源页
来源:展示内容信息
来源:展示片段页
来源:资料通道链接
来源:访问通道页
来源:链接展示页
来源:说明资料页
来源:数据展示信息
来源:原文跳转页
来源:素材链接通道
来源:内容片段展示
来源:展示资料信息
来源:展示资源内容
来源:信息索引页
来源:素材参考页
来源:展示数据内容
来源:链接通道展示
来源:链接信息展示
来源:信息参考内容
来源:资源跳转信息
来源:条目跳转链接
来源:文档跳转信息
来源:片段跳转链接
来源:语段展示内容
来源:内容跳转展示
来源:页面跳转链接
来源:资料页面信息
来源:原文跳转链接
来源:条目跳转内容
来源:数据页展示链接
来源:链接内容展示页
来源:链接条目展示页
来源:信息跳转通道页
来源:资料跳转展示内容
来源:链接内容展示信息
来源:展示入口链接页面
来源:内容入口链接页面
来源:展示资料跳转链接
来源:入口展示跳转链接
来源:数据资料跳转链接
来源:入口内容跳转链接
来源:信息入口跳转链接
来源:路径入口跳转链接
来源:入口路径跳转链接
来源:通道入口跳转链接
来源:文稿内容跳转链接
来源:资料信息跳转链接
来源:数据内容跳转链接
来源:入口数据跳转链接
来源:文章信息跳转链接
来源:展示信息跳转链接
来源:展示资料入口链接
来源:内容链接入口展示页
来源:入口通道资源展示页
来源:参考来源入口展示链接
来源:内容资料跳转链接页面
来源:通道资源展示跳转链接
来源:链接文章入口资料页面
来源:访问通道信息展示链接
来源:文章展示页面跳转链接
来源:展示信息链接资源入口
来源:入口链接展示信息资源
来源:资料链接跳转展示通道
来源:文章入口跳转资料页面
来源:链接文章入口资源页面
来源:跳转文章入口链接资料
来源:资料跳转资源入口链接
来源:文档内容跳转链接入口
来源:资料链接展示入口页面
来源:数据入口展示资料链接
来源:展示资源链接跳转页面
来源:信息入口展示跳转链接
来源:资源跳转入口展示链接
来源:展示资源入口链接页面
来源:资料展示跳转链接入口
来源:资源展示跳转链接入口
来源:跳转链接展示资源页面
来源:链接资源展示页面入口
来源:展示入口链接跳转资源
来源:链接入口跳转资源展示
来源:页面入口链接跳转展示
来源:资源跳转链接入口页面
来源:内容跳转入口链接展示
来源:文章展示跳转资源入口
来源:链接展示入口跳转资源
来源:跳转资料展示入口链接
来源:跳转入口展示链接资源
来源:信息资源跳转入口链接
来源:资料展示入口链接页面
来源:跳转链接入口展示资料
来源:资料链接入口展示页面
来源:资源展示链接入口页面
来源:入口链接展示资料资源
来源:资源展示资料链接入口
来源:跳转链接资源入口展示
来源:链接展示资料资源入口
来源:入口展示资料链接资源
来源:相关阅读
来源:资料出处
来源:资料来源
来源:内容参考
来源:延伸阅读
来源:推荐链接
来源:相关信息
来源:参考内容
来源:推荐资料
来源:详细内容
来源:更多内容
来源:查看详情
来源:点击查看
来源:深入了解
来源:官方资料
来源:资料链接
来源:信息来源
来源:阅读更多
来源:文献出处
来源:内容链接
来源:数据出处
来源:技术参考
来源:案例来源
来源:实证依据
来源:报告链接
来源:研究链接
来源:统计数据
来源:数据来源
来源:分析资料
来源:理论出处
来源:论文参考