温馨提示×

centos c++多线程怎么做

小樊
42
2026-09-09 01:00:39
栏目: 编程语言

CentOS 上做 C++ 多线程,常见做法有两类:

  1. C++11 标准线程(std::thread ✅(推荐,跨平台)
  2. POSIX 线程(pthread)(Linux 底层,CentOS 常用)

下面分别说明。


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

1️⃣ 环境要求

CentOS 一般自带 GCC 4.8+(支持 C++11)
检查版本:

g++ --version

如果是老系统(如 CentOS 6):

yum install gcc-c++

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️⃣ 编译(重要)

必须加 -pthread

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

运行:

./main

4️⃣ 线程同步(mutex)

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;

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

int main() {
    std::thread t1(worker, 1);
    std::thread t2(worker, 2);
    t1.join();
    t2.join();
}

二、使用 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

三、常见问题(CentOS 特有)

❌ 报错:std::thread not member

原因:

  • GCC 版本太低
  • 没加 -std=c++11

✅ 解决:

g++ xxx.cpp -std=c++11 -pthread

❌ 运行时崩溃

  • 忘记 join()
  • 线程访问已销毁对象

四、推荐学习路线

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

如果你愿意,我可以:

  • 给你一个 CentOS 线程池示例
  • 多核 CPU 绑定(CPU affinity)
  • 或针对 服务器高并发场景 给方案

你现在是 学习 / 项目 / 服务器开发 哪种用途?

0