温馨提示×

linux c++配置怎么配多线程

小樊
45
2026-09-02 02:40:47
栏目: 编程语言

下面按**“Linux + C++ 配置多线程”**的常见场景,分几种方式给你讲清楚,从最基础到工程常用。


一、最基础:使用 C++11 标准线程(推荐)

1️⃣ 编译器要求

  • g++ >= 4.8(建议 7+)
  • 必须加 -pthread

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++ main.cpp -o main -pthread

✅ 这是最通用、跨平台的方案


二、Linux 原生 POSIX 线程(pthread)

适合:

  • 老项目
  • 系统级编程

示例

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

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

三、CMake 配置多线程(工程推荐)

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(multithread_demo)

set(CMAKE_CXX_STANDARD 11)

find_package(Threads REQUIRED)

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

构建

mkdir build && cd build
cmake ..
make

自动处理 -pthread


四、线程数量配置(CPU 核数)

#include <thread>
unsigned int n = std::thread::hardware_concurrency();

常用于线程池:

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

五、常见坑(很重要)

❌ 忘记 -pthread

症状:

undefined reference to `pthread_create'

❌ 数据竞争

int x = 0;
// 多线程同时修改 x ❌

✅ 解决:

  • std::mutex
  • std::atomic
#include <mutex>
std::mutex mtx;
mtx.lock();
// 临界区
mtx.unlock();

六、进阶方向(如果你需要)

  • 线程池
  • std::async
  • 无锁队列
  • std::condition_variable
  • 多核 CPU 亲和性(CPU affinity)

如果你愿意,可以告诉我:

  • 学习 / 面试 / 项目 / 服务器
  • 是否用 CMake / Makefile
  • 是否需要 线程池示例

我可以直接给你一套可跑的完整工程结构。

0