当前位置:

首页 > 编程开发 > Linux C++多线程编程怎样实现

Linux C++多线程编程怎样实现

在Linux环境下用C++玩转多线程 说到在Linux环境下进行C++多线程开发,很多开发者首先想到的就是C++11标准库里的头文件。它提供了一套相对基础但非常核心的线程管理工具,算是我们踏入并发编程世界的第一块敲门砖。下面,咱们就从一个最经典的“Hello World”式例子开始,看看线程是怎么创

本文目录

    在Linux环境下用C++玩转多线程

    说到在Linux环境下进行C++多线程开发,很多开发者首先想到的就是C++11标准库里的头文件。它提供了一套相对基础但非常核心的线程管理工具,算是我们踏入并发编程世界的第一块敲门砖。下面,咱们就从一个最经典的“Hello World”式例子开始,看看线程是怎么创建和运行的。

    Linux C++多线程编程怎样实现

    #include 
    #include 
    
    // 线程函数
    void helloFunction() {
        std::cout << "Hello from a thread!" << std::endl;
    }
    
    int main() {
        // 创建线程
        std::thread t(helloFunction);
        // 等待线程完成
        t.join();
        std::cout << "Thread has finished execution." << std::endl;
        return 0;
    }

    这段代码清晰地展示了多线程编程的基本骨架:首先引入库,然后定义一个将在新线程中执行的函数(这里叫helloFunction)。在main函数里,关键的一步是使用std::thread构造函数创建线程对象,并把目标函数传进去。最后,那个t.join()调用至关重要——它会阻塞主线程,一直等到子线程t执行完毕才继续往下走。这就保证了程序的有序收尾。

    给线程函数传递参数

    当然,实际开发中线程函数很少是“光杆司令”,它们通常需要处理一些数据。那么,如何给线程传递参数呢?方法其实很直观,看下面这个计算求和的例子:

    #include 
    #include 
    
    // 线程函数,接受两个参数
    void addFunction(int a, int b) {
        std::cout << "The sum is " << a + b << std::endl;
    }
    
    int main() {
        // 创建线程,并传递参数
        std::thread t(addFunction, 5, 7);
        // 等待线程完成
        t.join();
        std::cout << "Thread has finished execution." << std::endl;
        return 0;
    }

    看到了吗?创建std::thread对象时,只需要把函数名和所需的参数按顺序依次列出即可,语法上几乎和普通函数调用一样自然。这大大降低了多线程入门的门槛。

    无法回避的挑战:线程同步

    然而,一旦多个线程开始运行,真正的挑战才刚刚开始。如果它们需要访问共享的数据或资源,混乱就可能随之而来,也就是常说的竞态条件,导致数据不一致等诡异问题。这时候,同步机制就必须登场了。

    好在C++标准库为我们准备了几样“法宝”:互斥锁std::mutex用于独占访问,条件变量std::condition_variable用于线程间通信等待,还有原子操作std::atomic用于无需锁的简单操作。其中,互斥锁是最常用的一种。来看一个用它保护控制台输出的例子:

    #include 
    #include 
    #include 
    
    std::mutex mtx; // 创建一个互斥锁
    
    void printMessage(const std::string& msg) {
        mtx.lock();   // 锁定互斥锁
        std::cout << msg << std::endl;
        mtx.unlock(); // 解锁互斥锁
    }
    
    int main() {
        std::thread t1(printMessage, "Hello from thread 1");
        std::thread t2(printMessage, "Hello from thread 2");
        t1.join();
        t2.join();
        return 0;
    }

    这里,我们定义了一个全局互斥锁mtx。在printMessage函数中,任何线程在执行打印操作前,都必须先调用mtx.lock()获得锁的所有权;操作完成后,再调用mtx.unlock()释放锁。这就确保了即使t1和t2同时想打印,也只有一个能进入“临界区”,从而避免了输出信息杂乱地交织在一起。

    话说回来,多线程编程的水远比上面展示的要深。它涉及死锁、活锁、线程饥饿等经典难题,在实际的大型应用中,往往还需要引入线程池来管理线程生命周期,或者设计专门的并发数据结构来提升性能。可以说,写出正确且高效的多线程程序,是对开发者设计能力和细节把控能力的综合考验。不过,只要理解了这些基础概念和工具,你就已经拥有了探索更广阔并发世界的坚实起点。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Linux
    相关文章 更多
    linux删除用户与用户组的方法及命令教程
    linux删除用户与用户组的方法及命令教程

    掌握Linux中删除用户和用户组的正确方法,避免残留文件和进程冲突。本文深入解析userdel和groupdel命令的参数用法,提供处理“用户仍在使用”等常见错误的实战方案。

    Linux如何开启端口号?开放端口命令详解
    Linux如何开启端口号?开放端口命令详解

    详细讲解Linux如何开启端口号以及常用的开放端口命令。

    crossover卸载软件下载及重新安装教程
    crossover卸载软件下载及重新安装教程

    遇到CrossOver运行错误或需要更新版本时,如何彻底卸载旧版并干净重装?本教程详解macOS和Linux下的卸载步骤、残留文件清理方法及官方下载渠道,确保软件环境纯净稳定。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。