温馨提示×

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

小樊
42
2026-09-05 04:48:56
栏目: 编程语言

在 Linux 下用 C++ 配置和使用多线程,常见方式有三种:C++11 标准线程(推荐)POSIX 线程(pthread)、以及 第三方库(如 Boost)。下面按从简单到底层讲,并给出可运行示例和编译方法。


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

1️⃣ 基本配置

  • 编译器:g++ / clang++
  • 标准:C++11 及以上
  • 编译需加:-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 -std=c++11 -pthread -o main
./main

二、线程同步(非常重要)

1️⃣ 互斥锁(mutex)

#include <mutex>

std::mutex mtx;

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

✅ 推荐用:

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

三、POSIX 线程(pthread,偏底层)

示例

#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_demo.cpp -pthread -o pthread_demo

四、查看 CPU 核心数(线程数配置参考)

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

五、常见问题 & 建议

推荐做法

  • 新手:用 std::thread
  • 服务器程序:线程池(可手写或用库)
  • 高并发:考虑 epoll + 线程池

⚠️ 注意

  • 不要直接 detach() 除非很清楚后果
  • 避免数据竞争(race condition)
  • 多核机器才能体现多线程优势

如果你愿意,我可以帮你:

  • ✅ 写一个 Linux C++ 线程池
  • ✅ 配置 CMake 多线程工程
  • ✅ 讲 多线程 + 网络(socket)
  • ✅ 排查你当前的编译/运行错误

你可以直接把你的代码或报错贴出来。

0