记录:如何使用C++ boost中的多线程工具?

关键词:C语言 C++  boost  多线程  异步  消息中间件  VS2022

引子

       作为C语言的开发者,我会使用POSIX作为使用多线程的工具。其补充标准中提供了丰富的接口,足以应付常见的应用场景。在现在的机器上,我使用C++11进行开发, 当然C++11提供了线程接口,但是还不够,我需要一些消息中间件,来实现异步操作。当然我也自己写了消息中间件,他也正常工作了,我不推崇造重复造轮子。更何况自己造的轮子不一定更好用。今天这篇文章,是记录在windows与Linux平台下boost库中多线程工具的使用。

        官网链接:Boost C++ Libraries

        开发环境:VS 2019 minGW编译器传送门

正文

        一共需要4个步骤完成配置,步骤5为测试代码。

下载

        首先。下载boost。对于boost中的组件,很多是不需要编译就可以使用的,它只有头文件。这意味着你下载好,包含就可以使用了。但是多线程这个组件除外。他是需要编译的组件之一。那么我们开始下载吧。

        下载地址:Boost Downloads

构建

        通常官网会提供非常详细的教程的,更多说明,可以去官网获取,链接在文末。

        如果仅使用无需构建的组件,那我们直接跳转到配置过程就好了。那么需要构建的组件都有哪些呢?

        ……

        Boost.Thread

        ……        

        赫然在列。那么,第二步就是解压缩后,使用脚本构建工程。在windows下我们使用的是.bat批处理文件实现。在Linux下则是命令行。位于根路径下的bootstrap,执行该文件即可。

编译

        然后,使用目标编译器进行编译出静态库或者动态库。执行完bootstrap会出现b2.exe点击执行即可。在stage\lib目录下发现生成libboost_thread-vc142-mt-gd-x32-1_80.lib,那么大功告成了。

配置

       配置头文件 

         配置链接静态库

测试

        包含头文件。

#include <iostream>
#include <boost/thread/thread.hpp>

        测试代码。

void task()
{
    std::cout << "Hello World!\n";
}

int main()
{
    auto myThread = boost::thread(task);   
    myThread.join();
}

        运行代码。

Hello World!

        好了,万事大吉,玩点高级的吧。

拓展

        线程间通信:无锁队列

        包含头文件

#include <boost/lockfree/queue.hpp>

        创建队列      

boost::lockfree::queue<int> queue(128);

        生产者

void producer(void)
{
    for (int i = 0;  i != iterations; ++i) {
        int value = ++producer_count;
        while (!queue.bounded_push(value));        
        sleep(1);
    }
    sleep(7);
    clear_queue();
}

        消费者

void consumer(void)
{
    int value;
    sleep(10);
    while (queue.pop(value))  {
        ++consumer_count;       
        sleep(1);
    }   
}

        来了!

int main(int argc, char* argv[])
{
    using namespace std;
    cout << "boost::lockfree::queue is ";
    if (!queue.is_lock_free())
        cout << "not ";
    cout << "lockfree" << endl;
    boost::thread th1(producer);
    boost::thread th2(consumer);
    th1.detach();
    th2.detach();
    while(1);
    return 0;
}

        完美!

补充

        它太大了!

        是的,它太大了,你需要指定模块编译就行,它太难了,你来吧,我喜欢傻瓜式的安装教程,新手友好。我的电脑也足够优秀,我懒得摆弄它了。

        偶然发现了log组件,足够了,准备放弃log4cplus了!下一篇日志记录一下。

结尾

        C++标准库中的用法可以参考我的另一篇学习笔记。是对第二版C++并发实践的关键概念和代码的摘录。这本书还在继续阅读,后续的笔记也会逐渐更新。C++并发简明教程https://blog.csdn.net/qq_18826027/article/details/127158380       生产消费者是啥?请移步这篇文章。       

C++ 线程间通信 标准库与boost引入一个多线程中的重要概念:多线程用来平衡不同任务负载。https://blog.csdn.net/qq_18826027/article/details/127343260

附录

使用说明:https://www.boost.org/doc/libs/1_80_0/more/getting_started/index.htmlhttps://www.boost.org/doc/libs/1_80_0/more/getting_started/index.html

Windows:https://www.boost.org/doc/libs/1_80_0/more/getting_started/windows.htmlhttps://www.boost.org/doc/libs/1_80_0/more/getting_started/windows.html

Linux:https://www.boost.org/doc/libs/1_80_0/more/getting_started/unix-variants.htmlhttps://www.boost.org/doc/libs/1_80_0/more/getting_started/unix-variants.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值