温馨提示×

linux c++配置如何配多线程

小樊
46
2026-10-19 16:56:46
栏目: 编程语言

在 Linux 下用 C++ 写多线程程序,常见做法有三种:POSIX 线程(pthread)、C++11 标准线程(std::thread)、以及更高层的线程池 / 并发库。下面从环境配置 → 编译 → 示例 → 常见坑逐步说明。


一、最简方式(推荐):C++11 std::thread

1️⃣ 编译环境要求

  • Linux(Ubuntu / CentOS / Arch 等均可)
  • g++ ≥ 4.8(推荐 ≥ 7)
  • 支持 C++11 及以上

查看版本:

g++ --version

2️⃣ 示例代码

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

3️⃣ 编译命令(重点)

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

✅ -pthread 必须加(链接 pthread 库)

运行:

./main

二、传统方式:POSIX 线程(pthread)

适合:

  • 老项目
  • 需要底层控制

示例

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

void* run(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, run, &a);
    pthread_create(&t2, nullptr, run, &b);

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

编译

g++ main.cpp -o main -pthread

三、使用线程池(进阶)

C++ 标准库 没有线程池,常见做法:

✅ 推荐方案

  • 自定义线程池
  • 第三方库
    • boost::asio
    • Intel TBB
    • std::async + future

简单线程池示例(示意):

std::vector<std::thread> pool;
for (int i = 0; i < 4; ++i)
    pool.emplace_back(worker, i);

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

四、CMake 配置(工程化)

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo)

set(CMAKE_CXX_STANDARD 11)

add_executable(demo main.cpp)
find_package(Threads REQUIRED)
target_link_libraries(demo Threads::Threads)

编译:

mkdir build && cd build
cmake ..
make

五、常见坑

❌ 忘记加 -pthread
❌ 线程未 join() 导致程序提前结束
❌ 多个线程同时 cout(建议加 mutex)
✅ 使用 std::lock_guard<std::mutex>


六、推荐学习路线

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

如果你愿意,我可以:

  • 给你一个 完整线程池示例
  • 讲 Linux 下多线程调试(gdb / htop)
  • 讲 多线程 + 网络编程(epoll)

你想继续哪一块?

0 踩