c++
标准库
中的多线程库提供了创建、管理和同步线程的工具。其使用方法包括创建线程(std::thread)、管理线程(join、detach、sleep_for)和同步线程(互斥体、条件变量、读写锁)。实战案例展示了如何使用多线程加速图像灰度化:分配任务给多个线程,处理完成后合并结果。
C++ 标准库中的多线程库使用指南
多线程是并发编程的一种形式,它允许一个程序中的多个线程同时执行。它可以提高应用程序的效率和性能。C++ 标准库中提供了多线程库,它提供了用于创建、管理和同步线程的强大工具。
创建线程
立即学习
“
C++免费学习笔记(深入)
”;
C函数速查手册(CHM版)
C函数速查手册(CHM版)
下载
管理线程
线程库提供了多种方法来管理线程,包括:
:等待线程完成。
:将线程与主线程分离,主线程不再需要等待它完成。
:使线程休眠一段时间。
同步线程
同步是确保多个线程安全访问共享资源的关键。C++ 多线程库提供了多种同步原语,包括:
互斥体(Mutex)
:确保一次只有一个线程可以访问共享数据。
条件变量(Condition Variables)
:允许线程等待特定条件满足。
读写锁(Read-Write Locks)
:允许多个线程同时读取共享数据,但每次只能有一个线程写入数据。
实战案例:并行处理
多线程可用于并行处理资源密集型任务。以下示例演示了如何使用多线程加速图像灰度化:
#include
#include
void threadFunction() {
std::cout << "Hello from a thread!" << std::endl;
}
int main() {
std::thread t(threadFunction);
t.join(); // 等待线程完成
return 0;
} join()detach()sleep_for()#include
#include
#include
void grayscaleImage(std::vector& image, int start, int end) {
for (int i = start; i < end; ++i) {
image[i] = (image[i] + image[i + 1] + image[i + 2]) / 3;
}
}
int main() {
// 读取图像数据
std::vector image;
...
// 分配任务给线程
int numThreads = 4;
std::vector threads(numThreads);
int chunkSize = image.size() / numThreads;
for (int i = 0; i < numThreads; ++i) {
threads[i] = std::thread(grayscaleImage, std::ref(image), i * chunkSize, (i + 1) * chunkSize);
}
// 等待线程完成
for (auto& thread : threads) {
thread.join();
}
// 保存结果
...
return 0;
} 