cpp thread 创建

cpp thread 创建

Admin·5/30/2025·0 views
C++

这段 C++ 代码演示了如何使用 std::thread 创建并管理线程。以下是逐行解释:

代码分析

std::thread t([](){  // 1. 创建一个新线程
    std::cout << "Hello from thread!" << std::endl;  // 2. 线程执行的代码
});  // 3. 线程开始执行

t.join();  // 4. 等待线程结束

详细说明

  1. 创建线程对象
    std::thread t(...)
  • 声明一个名为 t 的线程对象。
  • 构造函数参数是一个 ​lambda 表达式[](){ ... },它定义了线程要执行的任务。
  • 当对象 t 被创建时,线程立即开始执行。
  • 线程任务(Lambda 表达式)​

cpp [](){ std::cout << "Hello from thread!" << std::endl; }

  • []:空捕获列表(不捕获外部变量)。
  • ():无参数。
  • 函数体:向标准输出打印 "Hello from thread!" 并换行(std::endl 会刷新缓冲区)。
  • 线程启动
    线程在 t 对象构造完成后立即开始执行​ lambda 中的代码,与主线程并发运行。
  1. 等待线程结束(.join())​
    t.join()
  • 阻塞主线程,直到线程 t 完成其任务。
  • 确保线程安全退出,避免资源泄漏(必须调用 join()detach())。

执行流程

sequenceDiagram
    participant 主线程
    participant 子线程

    主线程->>子线程: 创建线程 t (lambda 开始执行)
    子线程->>控制台: 打印 "Hello from thread!"
    主线程->>子线程: t.join() 等待
    子线程-->>主线程: 执行完毕
    主线程->>主线程: 继续执行后续代码

控制台子线程主线程控制台子线程主线程创建线程 t (lambda 开始执行)打印 "Hello from thread!"t.join() 等待执行完毕继续执行后续代码

关键点

  • 并发性​:子线程与主线程同时运行(打印操作可能发生在 t.join() 之前/期间)。
  • 资源管理​:必须调用 join()(等待线程结束)或 detach()(分离线程),否则程序终止时 std::terminate 会被调用。
  • 输出顺序不确定性​:若主线程有其他输出,由于线程调度,打印顺序可能不同(此例中主线程无其他操作)。

等价函数写法

若用普通函数替代 lambda:

void threadFunc() {
    std::cout << "Hello from thread!" << std::endl;
}

int main() {
    std::thread t(threadFunc); // 传递函数指针
    t.join();
}

常见错误

  • 忘记 join/detach​:导致程序崩溃。
  • 访问共享数据不同步​:此例无共享数据,安全。

总结​:这段代码创建了一个打印消息的线程,并确保主线程等待其完成后再退出,是多线程编程的基础操作。

Comments (0)