C++ 多线程编程基础与 std::thread 使用

C++ 多线程编程基础与 std::thread 使用

C++11 提供了标准线程库,让多线程编程更加安全和便捷。本文将讲解 std::thread 的基本使用及注意事项。


一、创建线程

cpp 复制代码
#include <iostream>
#include <thread>

void task(int n) {
    std::cout << "线程 " << n << " 正在执行\n";
}

int main() {
    std::thread t1(task, 1);
    std::thread t2(task, 2);

    t1.join(); // 等待线程结束
    t2.join();
}

二、线程参数传递

可以通过值或引用传递参数:

cpp 复制代码
void modify(int &x) { x += 5; }

int main() {
    int num = 10;
    std::thread t(modify, std::ref(num)); // 使用 std::ref 传引用
    t.join();
    std::cout << "num = " << num << "\n"; // 15
}

三、线程安全与互斥量

多线程共享数据时需要使用互斥量 std::mutex:

cpp 复制代码
#include <mutex>
#include <vector>

std::mutex mtx;
int counter = 0;

void increment(int n) {
    for (int i = 0; i < n; i++) {
        std::lock_guard<std::mutex> lock(mtx);
        counter++;
    }
}

int main() {
    std::thread t1(increment, 1000);
    std::thread t2(increment, 1000);

    t1.join();
    t2.join();
    std::cout << "counter = " << counter << "\n";
}

总结

std::thread 用于创建和管理线程

使用 join() 等待线程结束

共享数据时要用 std::mutex 或其他同步机制

相关推荐
-西门吹雪几秒前
现代C++ 并发编程-学习指南
java·jvm·c++
aaPIXa6222 小时前
C++ TensorRT Edge-LLM 边缘推理框架:从原理到实战
开发语言·c++·edge
nianniannnn3 小时前
c++复习自存--标准模板库STL
开发语言·c++·windows
努力努力再努力wz3 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
Robot_Nav4 小时前
C++ 面试常问问题汇总:基础语法、面向对象、STL、多线程与设计模式
c++·设计模式·面试
一拳一个呆瓜4 小时前
【STL】iostream 编程:使用插入运算符并控制格式
c++·stl
盐焗鹌鹑蛋4 小时前
【C++】二叉搜索树
c++
哎呦,帅小伙哦4 小时前
C++工程实战: 预处理宏、宏重定义避坑、LOG_TAG业务实践与__COUNTER__深度解析
c++
IVVi0jToe5 小时前
高效C++线程池设计与实现
java·c++·安全
^yi5 小时前
【C++】内存管理
开发语言·c++