温馨提示×

c++多线程linux如何实现

小樊
42
2026-09-14 06:40:11
栏目: 编程语言

在 Linux 下用 C++ 实现多线程,常见做法有三种:

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

下面从 最常用、最现代 的方式讲起。


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

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;
}

编译(Linux):

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

✅ -pthread 很关键


2️⃣ Lambda 线程

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

3️⃣ 线程同步(mutex)

#include <mutex>

std::mutex mtx;

void safe_print(int id) {
    std::lock_guard<std::mutex> lock(mtx);
    std::cout << "Thread " << id << "\n";
}

4️⃣ 条件变量(生产者消费者)

#include <condition_variable>

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void consumer() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return ready; });
    std::cout << "Consumed\n";
}

void producer() {
    {
        std::lock_guard<std::mutex> lock(mtx);
        ready = true;
    }
    cv.notify_one();
}

二、POSIX 线程(pthread,C 风格)

适合 底层 / 老项目

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

void* thread_func(void* arg) {
    int id = *(int*)arg;
    std::cout << "pthread " << id << "\n";
    return nullptr;
}

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

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

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

编译:

g++ pthread_example.cpp -pthread

三、线程池(简单思路)

#include <vector>
#include <thread>

int main() {
    std::vector<std::thread> pool;
    for (int i = 0; i < 4; ++i) {
        pool.emplace_back([i] {
            std::cout << "Worker " << i << "\n";
        });
    }

    for (auto& t : pool) t.join();
}

四、Linux 特有注意事项

✅ 多核

Linux 默认支持多核并行
可用:

nproc

✅ 查看线程

ps -eLf
top -H

五、推荐学习路径

  1. std::thread
  2. mutex / lock_guard
  3. condition_variable
  4. atomic
  5. 线程池

如果你愿意,我可以:

  • 写一个 ✅ 完整线程池
  • 写一个 ✅ 生产者消费者模型
  • 讲 ✅ 线程 vs 进程区别
  • 讲 ✅ C++ 多线程常见坑

你想看哪一个?

0 踩