温馨提示×

ubuntu c++怎样写多线程

小樊
46
2026-09-17 13:36:51
栏目: 编程语言

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


一、使用 C++11 标准线程(推荐 ✅)

这是最简单、最通用的方式,不需要额外库。

1️⃣ 编译环境

确保 g++ 支持 C++11 及以上:

g++ --version

编译时加 -pthread

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

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️⃣ Lambda 写法

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

二、使用 POSIX 线程(pthread,Linux 原生)

适合更底层控制,但代码更繁琐。

示例

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

void* worker(void* arg) {
    int id = *(int*)arg;
    std::cout << "线程 " << id << "\n";
    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++ main.cpp -o main -pthread

三、线程同步(重要)

1️⃣ 互斥锁(mutex)

#include <mutex>

std::mutex mtx;

void safe_print() {
    mtx.lock();
    std::cout << "安全输出\n";
    mtx.unlock();
}

或用 RAII:

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

2️⃣ 条件变量(condition_variable)

用于线程等待/通知。


四、常见错误 ❌

  • 忘记 join()detach()
  • 多线程同时写 cout(要用 mutex)
  • 忘记 -pthread

五、推荐学习路线

  1. std::thread
  2. std::mutex
  3. std::atomic
  4. std::async
  5. 线程池(进阶)

如果你愿意,我可以:

  • 线程池示例
  • 生产者消费者模型
  • 对比 C++ vs Python 多线程

你更想学哪一种?

0