温馨提示×

ubuntu c++怎么用多线程

小樊
39
2026-09-08 09:45:23
栏目: 编程语言

在 Ubuntu 下用 C++ 写多线程,常见有 三种方式:

  1. C++11 标准线程(std::thread)✅ 推荐
  2. POSIX 线程(pthread)
  3. 第三方库(如 OpenMP、Boost)

下面重点讲 最常用、最现代的 std::thread。


一、使用 C++11 std::thread(推荐)

1️⃣ 编译环境

Ubuntu 一般自带 g++,确保版本 ≥ 4.8:

g++ --version

2️⃣ 示例代码

#include <iostream>
#include <thread>

void worker(int id) {
    std::cout << "线程 " << id << " 正在运行\n";
}

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

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

    std::cout << "主线程结束\n";
    return 0;
}

3️⃣ 编译(⚠️必须加 -pthread)

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

二、线程同步(避免数据竞争)

使用 std::mutex

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;

void count(int id) {
    mtx.lock();
    std::cout << "线程 " << id << "\n";
    mtx.unlock();
}

int main() {
    std::thread t1(count, 1);
    std::thread t2(count, 2);
    t1.join();
    t2.join();
}

✅ 更推荐用:

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

三、使用 lambda 创建线程

std::thread t([]{
    std::cout << "lambda 线程\n";
});
t.join();

四、POSIX 线程(pthread,老方式)

#include <pthread.h>
#include <iostream>

void* run(void*) {
    std::cout << "pthread\n";
    return nullptr;
}

int main() {
    pthread_t t;
    pthread_create(&t, nullptr, run, nullptr);
    pthread_join(t, nullptr);
}

编译:

g++ pthread.cpp -pthread

五、常见问题

❌ 忘记 join() 或 detach()

terminate called without an active exception

✅ 解决

t.join();   // 等线程结束
// 或
t.detach(); // 分离线程(不推荐新手用)

六、进阶推荐

  • std::async
  • std::future
  • std::condition_variable
  • 线程池(自己写或库)

如果你愿意,我可以: ✅ 写 线程池示例
✅ 讲 多线程+网络
✅ 对比 多线程 vs 多进程

你现在是学习还是做项目?

0 踩