商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > C++在Linux下的多线程编程怎样做

C++在Linux下的多线程编程怎样做

  发布于2026-05-28 阅读(0)

扫一扫,手机访问

在Linux环境下用C++搞多线程开发,绕不开POSIX线程库(pthread)。这套接口虽然看起来有点“古典”,但它是Linux系统级多线程编程的基石,理解它,就等于掌握了底层线程运作的钥匙。今天,咱们就把它从创建到管理的完整流程,掰开揉碎了讲清楚。

C++在Linux下的多线程编程怎样做

1. 包含头文件

第一步很简单,就是把pthread库的头文件引进来。记住,这个头文件是C风格的,但在C++里用起来完全没问题。

#include 

2. 定义线程函数

线程函数,说白了就是每个线程要执行的“任务”。它的签名是固定的,必须长这样:void* thread_function(void*)。参数和返回值都是void*,这意味着你可以传递任何类型的指针进去,灵活性很高。

void* thread_function(void* arg) {
    // 线程执行的代码
    std::cout << "Thread is running" << std::endl;
    return nullptr;
}

3. 创建线程

光有函数还不行,得把线程“生”出来。这就要用到pthread_create函数了。调用它时,需要准备好四个东西:一个用来存放线程ID的变量、线程属性(通常传nullptr用默认值)、线程函数的指针,以及传给线程函数的参数。

int main() {
    pthread_t thread_id;
    int result = pthread_create(&thread_id, nullptr, thread_function, nullptr);
    if (result != 0) {
        std::cerr << "Error creating thread: " << strerror(result) << std::endl;
        return 1;
    }
    std::cout << "Thread created with ID: " << thread_id << std::endl;
    // 等待线程结束
    pthread_join(thread_id, nullptr);
    return 0;
}

这里有个细节:创建线程后,最好立刻检查一下返回值。如果pthread_create返回非零值,就说明创建失败了,用strerror可以打印出具体的错误原因,这对于调试至关重要。

4. 等待线程结束

线程创建后,就和主线程并行跑起来了。但主线程可不能拍拍屁股就走,否则子线程可能还没干完活,整个程序就结束了,这会导致资源没被正确清理。所以,我们需要pthread_join来“等一等”子线程。

pthread_join(thread_id, nullptr);

这个调用会阻塞主线程,直到指定的线程执行完毕。第二个参数可以用来接收线程函数的返回值,如果不需要,传nullptr就行。

5. 编译和链接

代码写好了,编译的时候别忘了告诉编译器链接pthread库。用g++的话,加上-pthread选项是最简单直接的办法。

g++ -pthread your_program.cpp -o your_program

完整示例代码

把上面的步骤串起来,就是一个最精简的、可运行的例子:

#include 
#include 

void* thread_function(void* arg) {
    std::cout << "Thread is running" << std::endl;
    return nullptr;
}

int main() {
    pthread_t thread_id;
    int result = pthread_create(&thread_id, nullptr, thread_function, nullptr);
    if (result != 0) {
        std::cerr << "Error creating thread: " << strerror(result) << std::endl;
        return 1;
    }
    std::cout << "Thread created with ID: " << thread_id << std::endl;
    // 等待线程结束
    pthread_join(thread_id, nullptr);
    return 0;
}

编译和运行

保存代码,执行下面两条命令,就能看到效果了:

g++ -pthread your_program.cpp -o your_program
./your_program

如果一切顺利,终端会先后打印出“Thread created with ID: ...”和“Thread is running”。

注意事项

掌握了基本流程,只是万&里长征第一步。真正要把多线程用稳,下面这几点必须时刻放在心上:

  1. 线程安全:多个线程同时读写共享数据是“事故高发区”。务必使用互斥锁(pthread_mutex_t)、条件变量(pthread_cond_t)这些同步机制来保护临界区,防止数据竞争。
  2. 资源管理:线程本身、锁、条件变量等都是系统资源。创建了就要记得销毁,pthread_joinpthread_mutex_destroy这类清理函数该调用就得调用,避免内存泄漏和资源泄露。
  3. 错误处理:像pthread_createpthread_join甚至锁操作这些系统调用,都可能失败。养成检查返回值的习惯,并进行适当的错误处理,能让你的程序健壮得多。

把这些基础打牢,你就能在Linux下用C++自如地驾驭多线程,为开发高性能、高并发的程序铺平道路。

本文转载于:https://www.yisu.com/ask/28203800.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注