温馨提示×

ubuntu c++怎么进行多线程

小樊
38
2026-09-05 11:57:06
栏目: 编程语言

在 Ubuntu 下进行 C++ 多线程编程,常见有三种方式:

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

下面重点讲 最常用、最现代的 std::thread 方式,并补充 pthread 示例。


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

1️⃣ 编译环境要求

  • Ubuntu(16.04+ 都支持)
  • g++ 版本 ≥ 4.8

2️⃣ 示例代码

#include <iostream>
#include <thread>

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

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

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

    std::cout << "Main thread done\n";
    return 0;
}

3️⃣ 编译命令(必须加 -pthread

g++ main.cpp -o main -pthread

4️⃣ 运行

./main

二、线程同步(互斥锁)

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

std::mutex mtx;
int counter = 0;

void increment() {
    for (int i = 0; i < 100000; ++i) {
        std::lock_guard<std::mutex> lock(mtx);
        counter++;
    }
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);

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

    std::cout << "Counter = " << counter << std::endl;
}

三、使用 POSIX 线程(pthread)

示例

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

void* worker(void* arg) {
    int id = *(int*)arg;
    std::cout << "Thread " << id << std::endl;
    return nullptr;
}

int main() {
    pthread_t t1, t2;
    int a = 1, b = 2;

    pthread_create(&t1, nullptr, worker, &a);
    pthread_create(&t2, nullptr, worker, &b);

    pthread_join(t1, nullptr);
    pthread_join(t2, nullptr);
}

编译

g++ pthread_demo.cpp -o pthread_demo -pthread

四、常见注意事项

✅ 一定要 join()detach()
✅ 多线程访问共享数据必须加锁
✅ Ubuntu 默认支持多线程,无需额外安装
✅ 使用 -pthread 而不是 -lpthread(更规范)


五、进阶内容(如需要)

  • std::async
  • 线程池
  • 条件变量 std::condition_variable
  • std::atomic

如果你有具体需求(比如 网络通信 / 计算密集型 / 生产者消费者模型),可以告诉我,我可以直接给你对应示例。

0