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++ 并发编程的第一步。

posted @ 2025-07-21 18:42  seekwhale13  阅读(35)  评论(0)    收藏  举报