温馨提示×

linux c++如何配多线程

小樊
47
2026-10-25 15:14:37
栏目: 编程语言

在 Linux 下用 C++ 写多线程,常见做法有三种,从“标准、推荐”到“底层”依次是:


一、✅ 推荐:C++11 标准线程(std::thread)

最简单、可移植、现代 C++ 首选

1️⃣ 基本示例

#include <iostream>
#include <thread>

void worker(int id) {
    std::cout << "Thread " << id << " running\n";
}

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

    t1.join();
    t2.join();

    return 0;
}

2️⃣ 编译方式(必须加 -pthread)

g++ main.cpp -std=c++11 -pthread -o test

二、线程同步(非常重要)

多线程一定要防止数据竞争

1️⃣ 互斥锁 std::mutex

#include <mutex>

std::mutex mtx;

void safe_print(int id) {
    mtx.lock();
    std::cout << "Thread " << id << "\n";
    mtx.unlock();
}

✅ 更推荐:

std::lock_guard<std::mutex> lock(mtx);

三、✅ 进阶:线程池(实际项目常用)

标准库没有线程池,需要自己写或库

简单思路:

  • 固定 N 个线程
  • 任务队列
  • 条件变量通知

如果你需要,我可以给你一个完整线程池示例


四、⚠️ 底层方式(不推荐新手)

POSIX 线程 pthread

#include <pthread.h>

void* worker(void*) {
    return nullptr;
}

pthread_t t;
pthread_create(&t, nullptr, worker, nullptr);
pthread_join(t, nullptr);

❌ 缺点:

  • C 风格
  • 易出错
  • 不如 std::thread 安全

五、常见坑

❗ 忘记 join() → 程序崩溃
❗ 共享变量不加锁
❗ 死锁(多个 mutex 顺序不一致)
❗ 在多线程中用 std::cout 不保护


六、你可以告诉我

  • ✅ 是 学习 / 面试 / 项目
  • ✅ 是否需要 线程池
  • ✅ 是否要 多核 CPU 优化
  • ✅ 是否需要 异步任务(future / async)

我可以直接给你可运行代码模板。

0 踩