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

相关推荐
小欣加油10 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
星恒随风11 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
浪客灿心11 小时前
项目篇:模块设计与实现
数据库·c++
牛油果子哥q12 小时前
【C++ STL vector】C++ STL vector 终极精讲:动态数组底层原理、两倍扩容机制、迭代器失效、增删查改、性能剖析与工程避坑指南
开发语言·c++
为何创造硅基生物13 小时前
独占指针的创建std::make_unique 本身自带堆出现
c++
kyle~14 小时前
ROS 2 与 Isaac Sim 联合仿真(一)体系架构、环境选型与基础通信闭环
c++·机器人·nvidia·仿真·ros2
努力努力再努力wz14 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
八解毒剂14 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
起床困难户57515 小时前
条款20:协助完成返回值优化
c++
啦啦啦啦啦zzzz15 小时前
算法总结(二分查找、双指针)
c++·算法