C++ 学习(6)——多线程(1)--std::thread
以下是为你整理的博客文章:
C++ 学习(6)——多线程(1) —— std::thread
在现代应用程序开发中,多线程已成为提升程序性能和响应速度的重要手段。本文将以一个简单的 C++ 示例介绍如何使用
std::thread创建线程,并实现多任务并发执行。
一、前言
在 C++11 之前,C++ 标准库中并不直接支持多线程开发。而从 C++11 开始,标准库引入了 <thread> 头文件,我们可以直接使用 std::thread 类来创建和管理线程,极大地方便了并发编程。
本文将以一个简单示例,展示如何创建并运行一个线程,使程序能够并发输出两类信息。
二、代码示例
我们先来看一个简单的多线程程序:
#include <iostream>
#include <thread>
#include <chrono>
void say_hello(){
while(1) {
std::cout << "hello\n" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1)); // 等待1秒
}
}
int main() {
std::thread t(say_hello); // 创建一个线程执行 say_hello 函数
while (1) {
std::cout << "Hi\n" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1)); // 主线程等待1秒
}
t.join(); // 等待子线程结束(此处永远不会执行到)
return 0;
}
三、程序运行逻辑
1. std::thread 创建线程
这一行:
std::thread t(say_hello);
创建了一个新的线程 t,并在该线程中执行 say_hello 函数。这意味着程序将开启两个线程:
- 主线程:执行
main()函数体内的代码; - 子线程:并发执行
say_hello()函数。
2. sleep_for 控制间隔输出
为了让输出更加清晰,每个线程都使用了:
std::this_thread::sleep_for(std::chrono::seconds(1));
这段代码的作用是使当前线程暂停执行 1 秒钟,避免打印过快而看不清内容。
3. t.join() 的位置
虽然代码中最后有:
t.join();
但实际上永远不会执行到这一行,因为主线程在无限循环中,永远不会退出。这段代码放在这里只是说明:我们通常需要通过 join() 等待线程结束,防止主线程提前退出。但在这种永远运行的服务型线程中,可以不用调用 join() 或将其放置在逻辑合适的位置。
四、运行效果
程序运行后,将会看到如下输出交替出现:
Hi
hello
Hi
hello
...
两个线程交替地每秒输出一次信息。这说明程序确实实现了两个线程并发执行。
五、延伸思考
1. 多线程为何重要?
- 提高程序响应性:比如界面线程不被阻塞;
- 提高 CPU 利用率:充分使用多核处理器资源;
- 任务解耦:将耗时操作放到子线程处理。
六、小结
本篇博客我们介绍了 C++11 中的 std::thread,并通过一个简单的例子演示了多线程的基本使用方法。掌握 std::thread 是理解 C++ 并发编程的第一步。

浙公网安备 33010602011771号