最近学习 boost库,网上讲了很多的他的优势,跨平台、线程安全等 ,下面 咱们来看如何直接实现的吧。

/**************************************************************************** 名称:boost_thread.cpp* 描述:利用boost中线程库实现多线程编程.实现线程A,唤醒线程B进行计数* 作者:xhome* 时间:2019/12/27****************************************************************************/
#include <iostream>
#include <boost/thread.hpp>
#include <boost/bind.hpp>
#include <boost/thread/lock_factories.hpp>
#include <boost/thread/condition.hpp>using namespace std;
using namespace boost;
boost::condition_variable_any cond;  //定义条件变量.
boost::mutex  mu;/*** 描述:定义线程,线程消费者,线程体函数.*/
void thread_consumer(int arg){cout << "thread_consumer start ok." << endl;while(1){{  //方便资源的释放.{} 不能少,代表了锁的作用域auto lock = make_unique_lock(mu);cond.wait(lock);cout << "thread_consumer is wake up now --------" << endl;}}
}/*** 描述:定义线程,线程消费者,线程体函数.*/
void thread_producer(void){cout << "thread_producer start ok." << endl;while(1){boost::thread::sleep(boost::get_system_time() + boost::posix_time::seconds(1));  //睡眠时间1scout << "thread_producer notify one +++++++++++++" << endl;cond.notify_one(); //通过指定的条件变量来唤醒指定的线程.}
}int main(){//定义线程组,管理线程boost::thread_group  tg;// boost::thread  thread_1(&thread_consumer);//创建消费者线程.tg.create_thread(boost::bind(thread_consumer, 10));//创建生产者线程tg.create_thread(thread_producer);//线程阻塞.tg.join_all();return 0;
}

工程cmake配置 如下:

cmake_minimum_required(VERSION 3.15)
project(boost_example)set(CMAKE_CXX_STANDARD 14)INCLUDE_DIRECTORIES("/home/xhome/3.opt_lib/boost_1_72_x86/boost_install_x86/include")
LINK_DIRECTORIES("/home/xhome/3.opt_lib/boost_1_72_x86/boost_install_x86/lib")add_executable(boost_example main.cpp boost_thread.cpp )
target_link_libraries(boost_example -lboost_thread -lpthread)

运行结果:

实现了生产者将指定条件唤醒消费者

5002.boost库之thread相关推荐

  1. 【Boost】boost库中thread多线程详解1——thread入门与简介

    1. 概述 线程就是,在同一程序同一时间内允许执行不同函数的离散处理队列. 这使得一个长时间去进行某种特殊运算的函数在执行时不阻碍其他的函数变得十分重要. 线程实际上允许同时执行两种函数,而这两个函数 ...

  2. 【Boost】boost库中thread多线程详解9——thread_specific_ptr线程局部存储

    大多数函数都不是可重入的.这也就是说在某一个线程已经调用了一个函数时,如果你再调用同一个函数,那么这样是不安全的.一个不可重入的函数通过连续的调用来保存静态变量或者是返回一个指向静态数据的指针. 举例 ...

  3. 【Boost】boost库中thread多线程详解8——call_once仅运行一次

    还有一个问题没有解决:如何使得初始化工作(比如说构造函数)也是线程安全的.比方说,如果一个引用程序要产生唯一的全局的对象,由于实例化顺序的问题,某个函数会被调用来返回一个静态的对象,它必须保证第一次被 ...

  4. 【Boost】boost库中thread多线程详解5——谈谈线程中断

    线程不是在任意时刻都可以被中断的.如果将线程中函数中的sleep()睡眠等待去掉,那么即使在主线程中调用interrupt()线程也不会被中断.thread库预定义了若干个线程的中断点,只有当线程执行 ...

  5. 【Boost】boost库中thread多线程详解13——线程标识符

    在boost中也有唯一标识线程的数据结构:thread::id. boost::thread thread_func(func); thread::id var_id = thread_func.ge ...

  6. 【Boost】boost库中thread多线程详解12——线程的分离与非分离

    Boos::thread线程的默认属性为非分离状态,线程结束后线程标识符.线程退出状态等信息需要通过join方法回收. boost::thread thread_func(func); thread_ ...

  7. 【Boost】boost库中thread多线程详解11——线程的休眠和中断

    boost::thread 中提供一个静态方法 void boost::thread::sleep(system_time const& abs_time); 线程将休眠直到时间超时. sle ...

  8. 【Boost】boost库中thread多线程详解10——condition条件变量

    有的时候仅仅依靠锁住共享资源来使用它是不够的.有时候共享资源只有某些状态的时候才能够使用.比方说,某个线程如果要从堆栈中读取数据,那么如果栈中没有数据就必须等待数据被压栈.这种情况下的同步使用互斥体是 ...

  9. 【Boost】boost库中thread多线程详解6——线程组简单例子

    如果你需要创建几个线程,考虑使用一个线程组对象thread_group来组织它们.一个thread_group对象可以使用多种方法管理线程.首先,可以使用一个指向动态创建的线程对象的指针作为参数来调用 ...

最新文章

  1. 没有场景,不做单点技术输出,360数科如何做金融科技的最佳实践?
  2. vs2019快捷键设置
  3. 2021年寒假将至,教育部致信中小学生家长的一封信:人生如长跑,起步忌冲刺,薄发需厚积
  4. flex组合流动布局实例---利用css的order属性改变盒子排列顺序
  5. nginx+keepalived安装配置(整理中)
  6. 【行业进展】哪些公司在搞“新零售”了
  7. 图片上传之后清空_OSS文件上传及OSS与ODPS之间数据连通
  8. MySQL的IFNULL() 函数使用
  9. 易语言python1.1模块_易语言之编写模块与引入模块
  10. oracle共享内存不足,Oracle数据库共享内存分配不足怎么办
  11. matplotlib 画图总结
  12. iOS之深入解析App Thinning的应用瘦身优化
  13. 什么是内存屏障?具有什么作用?
  14. 为什么微信连接不上服务器失败怎么回事啊,微信为什么一直提示连接失败请检查网络设置...
  15. 你也可以看懂,量子力学的困惑,测不准原理 薛定谔的猫 !
  16. python-pcl函数_Python简介,第4章-函数
  17. 初中计算机竞赛面试题目及答案,2019上半年初中信息技术教师资格面试真题及答案(第四批)...
  18. 宋体的显示 --12号字的真正大小
  19. 有特别有创意的网站设计案例
  20. sigmoid的matlab实现

热门文章

  1. mysql 创建分区索引吗_MySQL分区字段列有必要再单独建索引吗?
  2. ArcEngine坐标操作那些事
  3. 大文件分片上传前端框架_无插件实现大文件分片上传,断点续传
  4. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-接收和发送数据)
  5. pcap文件提取后的dataframe,切分前向流与后向流
  6. Linux运行jnetpcap程序(含配置步骤)
  7. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
  8. c语言编程 伪代码,Dijkstra算法的伪代码和C语言版本,还是模版
  9. Numpy 之 where理解
  10. java多线程知识汇总(三)如何选择锁?如何加锁