商城首页欢迎来到中国正版软件门户

您的位置:首页 >C++多线程编程:std::thread使用教程

C++多线程编程:std::thread使用教程

  发布于2026-01-20 阅读(0)

扫一扫,手机访问

在C++中使用std::thread创建多线程需包含<thread>头文件,通过创建std::thread对象传入函数、lambda或函数对象来启动线程,实现跨平台多线程编程。

c++中如何使用std::thread创建多线程_c++多线程编程入门指南

在C++中使用std::thread创建多线程非常直接。从C++11开始,标准库提供了<thread>头文件,让开发者无需依赖平台相关的API(如pthread或Windows线程)就能编写跨平台的多线程程序。

包含头文件并启动一个线程

要使用多线程功能,首先需要包含<thread>头文件。然后你可以创建一个std::thread对象,并传入一个可调用的目标,比如函数、lambda表达式或函数对象。

示例:启动一个简单线程

#include <iostream>
#include <thread>

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

int main() {
    std::thread t(say_hello);  // 启动线程执行say_hello
    t.join();                  // 等待线程结束
    return 0;
}

这里,t.join()的作用是阻塞主线程,直到子线程执行完毕。如果不调用join()detach(),程序在主线程结束时会调用std::terminate(),导致异常退出。

传递参数给线程函数

你可以向线程函数传递参数,但需要注意:默认情况下,参数是以值拷贝方式传递的。如果需要传引用,必须使用std::ref包装。

示例:传参和引用传递

#include <iostream>
#include <thread>

void print_value(int& x) {
    x = 42;
    std::cout << "Inside thread: x = " << x << std::endl;
}

int main() {
    int value = 10;
    std::thread t(print_value, std::ref(value));  // 必须用std::ref才能传引用
    t.join();
    std::cout << "After thread: x = " << value << std::endl;  // 输出42
    return 0;
}

使用Lambda表达式创建线程

Lambda表达式是创建线程的常用方式,尤其适合短小的并发任务。

#include <iostream>
#include <thread>

int main() {
    auto task = []() {
        std::cout << "Lambda thread running!" << std::endl;
    };

    std::thread t(task);
    t.join();
    return 0;
}

也可以直接把lambda作为构造参数:

std::thread t([](){
    std::cout << "Inline lambda thread!" << std::endl;
});
t.join();

分离线程(detach)

如果你不希望主线程等待子线程,可以调用detach()。这样线程会在后台独立运行,生命周期不再受std::thread对象控制。

std::thread t([]{
    for(int i = 0; i < 5; ++i)
        std::cout << "Detached thread: " << i << std::endl;
});
t.detach();  // 分离线程
// 主线程可能很快结束,注意输出可能不完整

注意:detach()后无法再join(),且需确保被访问的数据在分离线程运行期间仍然有效。

基本上就这些。掌握std::thread的创建、参数传递、join与detach,就具备了C++多线程编程的基础能力。后续可以结合std::mutexstd::atomic等工具处理共享数据安全问题。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注