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

相关推荐
叼烟扛炮7 分钟前
C++第四讲:类和对象(下)
c++·算法·类和对象
Rabitebla7 分钟前
vector 的骨架:三根指针、模板陷阱与迭代器失效的第一现场
开发语言·数据结构·c++·算法
晚风吹红霞1 小时前
C++异常处理核心知识点全解析
开发语言·c++
CoderCodingNo1 小时前
【信奥业余科普】C++ 的奇妙之旅 | 17:面的铺展与文本的本质——二维数组与字符串
开发语言·c++
迷途之人不知返2 小时前
优先级队列:priority_queue
数据结构·c++
曦夜日长2 小时前
C++ STL容器string(一):string的变量细节、默认函数的认识以及常用接口的使用
java·开发语言·c++
代码中介商2 小时前
C++ STL 标准模板库完全指南:从容器到迭代器
开发语言·c++·stl
winner88812 小时前
C++ 构造函数、析构函数、虚函数、虚析构
开发语言·c++
想唱rap2 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
许长安2 小时前
protobuf 使用详解
c++·经验分享·笔记·中间件