温馨提示×

ubuntu怎样写c++多线程

小樊
49
2026-09-26 14:47:29
栏目: 编程语言

在 Ubuntu 上写 C++ 多线程,一般有两种常见方式:

  1. C++11 标准线程库(推荐,跨平台)
  2. pthread(Linux 原生线程库)

下面分别说明,并给出可运行示例。


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

1. 环境准备

Ubuntu 一般自带 g++,确认版本:

g++ --version

建议 g++ ≥ 4.8(支持 C++11)

2. 示例代码

#include <iostream>
#include <thread>

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

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

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

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

3. 编译运行

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

-pthread 是必须的,用于链接线程库


二、使用 pthread(Linux 传统方式)

示例代码

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

void* threadFunc(void* arg) {
    int id = *(int*)arg;
    std::cout << "Thread " << id << " is running\n";
    return nullptr;
}

int main() {
    pthread_t t1, t2;
    int id1 = 1, id2 = 2;

    pthread_create(&t1, nullptr, threadFunc, &id1);
    pthread_create(&t2, nullptr, threadFunc, &id2);

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

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

编译

g++ main.cpp -o main -pthread

三、线程同步(常用)

1. std::mutex

#include <mutex>

std::mutex mtx;

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

或用:

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

2. 条件变量

#include <condition_variable>

std::condition_variable cv;
bool ready = false;

// 等待
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; });

// 通知
ready = true;
cv.notify_all();

四、推荐学习路径

  • 初学:✅ std::thread
  • 进阶:mutex / condition_variable
  • 高性能:async / 线程池
  • Linux 底层:pthread

如果你愿意,我可以:

  • 给你一个 线程池示例
  • 或结合 Ubuntu + CMake 写完整工程
  • 或讲 多线程常见坑(竞态、死锁)

你更想学哪一块?

0 踩