温馨提示×

ubuntu gcc多线程如何使用

小樊
38
2026-09-19 05:03:38
栏目: 智能运维

在 Ubuntu 下使用 GCC 进行多线程编程,通常有两种常见方式:

  1. POSIX 线程(pthread)(最经典、最常用)
  2. C++11 标准线程(std::thread

下面分别说明,并给出编译命令示例


一、使用 pthread(POSIX Thread)

1. 安装必要的库(一般已自带)

sudo apt update
sudo apt install build-essential

2. 示例代码(pthread_demo.c)

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

void* thread_func(void* arg) {
    int id = *(int*)arg;
    printf("Thread %d is running\n", id);
    sleep(1);
    printf("Thread %d finished\n", id);
    return NULL;
}

int main() {
    pthread_t t1, t2;
    int a = 1, b = 2;

    pthread_create(&t1, NULL, thread_func, &a);
    pthread_create(&t2, NULL, thread_func, &b);

    pthread_join(t1, NULL);
    pthread_join(t2, NULL);

    printf("Main thread done\n");
    return 0;
}

3. 编译(非常重要:加 -pthread

gcc pthread_demo.c -o pthread_demo -pthread

4. 运行

./pthread_demo

注意

  • 必须加 -pthread,不是 -lpthread(虽然有时也能用,但 -pthread 更安全)

二、使用 C++11 std::thread

1. 示例代码(thread_demo.cpp)

#include <iostream>
#include <thread>

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

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

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

    std::cout << "Main thread done\n";
    return 0;
}

2. 编译

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

3. 运行

./thread_demo

三、常见错误

❌ 忘记加 -pthread

会出现类似错误:

undefined reference to `pthread_create'

✅ 解决:

gcc xxx.c -pthread

四、查看 CPU 核心数(有助于多线程)

nproc

五、推荐学习路径

  • pthread_create / join
  • 互斥锁 pthread_mutex_t
  • 条件变量 pthread_cond_t
  • C++:std::mutex, std::condition_variable

如果你愿意,我可以:

  • 给你一个 生产者消费者示例
  • 线程同步(锁)
  • 或讲 Ubuntu 下多核并行优化

你想学哪一个?

0