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 或其他同步机制

相关推荐
paeamecium6 分钟前
【PAT甲级真题】- Rational Sum (20)
数据结构·c++·python·算法·pat考试·pat
王维同学8 小时前
Winsock 协议与名称空间 Provider 目录
网络·c++·windows·安全
拳里剑气10 小时前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先
爱写代码的小朋友10 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
小小晓.10 小时前
C++:语句和作用域
开发语言·c++
fqbqrr10 小时前
2607C++,soui,xplayer视频播放器
c++·soui
zh路西法12 小时前
【10天速通ROS2-PX4无人机】(四) 关掉GPS和气压计,纯激光定位还能飞吗
c++·无人机·px4·ros2·卡尔曼滤波·fastlio2
yyds_yyd_1008612 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
王老师青少年编程14 小时前
csp信奥赛C++高频考点专项训练:【排序算法】案例7:最高分数的学生姓名
c++·排序算法·csp·高频考点·信奥赛·最高分数的学生姓名
库克克15 小时前
【C++】set 与multiset
开发语言·c++