温馨提示×

什么是linux c++多线程

小樊
45
2026-09-11 01:00:38
栏目: 编程语言

Linux C++ 多线程指的是在 Linux 操作系统 下,使用 C++ 语言 编写程序,让一个进程同时运行多个执行流(线程),以提高程序的并发性能。

下面从概念、实现方式、核心知识点和简单示例几个层面帮你梳理。


一、基本概念

1. 什么是线程

  • 线程是 进程中的一条执行路径
  • 同一进程内的线程:
    • 共享内存空间(全局变量、堆)
    • 有各自独立的栈和寄存器
  • 多线程适合:
    • CPU 密集型计算
    • I/O 并发(网络、文件)

2. Linux 与线程

Linux 中:

  • 线程本质上是 轻量级进程(LWP)
  • 内核(pthread / clone) 调度

二、Linux 下 C++ 多线程的实现方式

方式一:POSIX 线程(pthread)【最底层、最常用】

  • Linux 原生支持
  • C 接口,C++ 可直接用
#include <pthread.h>

方式二:C++11 标准线程(推荐)

  • 跨平台
  • 语法更现代、易用
#include <thread>

✅ 实际项目中:优先用 C++11 std::thread


三、C++11 多线程基础示例

示例:两个线程同时运行

#include <iostream>
#include <thread>

void func(int id) {
    std::cout << "Thread " << id << " is running\n";
}

int main() {
    std::thread t1(func, 1);
    std::thread t2(func, 2);

    t1.join();
    t2.join();

    return 0;
}

编译(必须加 -pthread):

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

四、多线程中的关键问题

1. 数据竞争(Race Condition)

多个线程同时修改同一变量 ❌

int count = 0;
// 多个线程同时 count++ ❌

2. 互斥锁(Mutex)

#include <mutex>

std::mutex mtx;

mtx.lock();
// 临界区
mtx.unlock();

或使用 RAII:

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

3. 条件变量(Condition Variable)

用于线程间通信(等待 / 通知)

std::condition_variable cv;

4. 死锁

  • 两个线程互相等锁
  • 避免方法:
    • 锁顺序一致
    • 使用 std::scoped_lock

五、Linux 特有的内容(进阶)

  • pthread_create / pthread_join
  • 线程属性( detached / joinable )
  • CPU 亲和性(绑核)
  • 信号在多线程中的行为
  • std::async / 线程池

六、典型应用场景

✅ 网络服务器(一个连接一个线程 / 线程池)
✅ 音视频处理
✅ 游戏引擎
✅ 高性能计算


七、一句话总结

Linux C++ 多线程 = 在 Linux 下用 C++ 创建多个并发执行流,共享内存、协同工作,但需要小心同步与竞争问题。

如果你愿意,我可以:

  • 给你一个 线程池示例
  • 对比 pthread vs std::thread
  • 死锁真实案例
  • 结合 Linux 命令(top / htop / pstack)调试线程

你想往哪方面深入?

0