boost thread学习
2016-07-13 11:35
316 查看
Boost thread基础学习
1、boost thread介绍thread库为c++增加了现成处理能力,它提供简明清晰的线程、互斥量等概念,可以很容易地创建多线程程序。thread库也是高度可移植的,它支持最广泛的windows和POSIX线程。
2、使用thread库
thread位于命名空间boost,为了使用thread组建需要包含头文件
<boost/thread.hpp>
2.1、时间功能
在多线程编程时经常要用到超时处理,需要使用时间的概念。thread直接使用的是boost里面的data_time库提供对时间的支持可以使用millisec/milliseconds、microsec/microsecond等时间长度类表示超时时间,或者用ptime表示某个确定的时间点。例如
this_thread::sleep(posix_time::seconds(5));//睡眠5s
为了更好的表示时间线程的含义,thread重新定义了一个新的时间类型system_time, 它跟posix_time::ptime一样
typedef boost::posix_time::ptime system_time;
同时thread提供一个自由函数get_system_time(),它抵用microsec_clock类方便地获取当前的URC时间值。
2.2、互斥量
互斥量是一种用于多线程同步的手段,它可以在多线程编程中防止多个线程同时操作共享资源,一旦一个线程锁住互斥量,其他线程必须等它解锁之后才能进行访问。
thread有七种(实际5种)互斥量类型,分别是
- mutex:独占式的互斥量,最简单最常用的一种互斥量类型;
- try_mutex:它是mutex的同义词,为了兼容以前的版本;
- timed_mutex:它是独占式互斥量,但是它特工超时锁定功能;
- recursive_mutex:递归式互斥量,可以多次锁定,相应得要多次解锁;
- recrusive_try_mutex:看意思,兼容以前版本
- recursive_time_mutex:基本功能与recursive_mutex一致,但是提供超时锁定功能;
- shared_mutex:multiple-reader/single-writer型共享互斥量(读写锁)。
互斥量的用法:
mutex mu; try{ mu.lock();//锁定互斥量 //临界区操作 mu.unlock();//解锁互斥量 } catch(...){ mu.unlock(); }
直接使用mutex的成员函数来锁定互斥量不够方便,而且在发生异常导致退出作用域等情况下可能忘记解锁;因此thread提供了一系列的RAII型的lock_guard类,由于辅助锁定互斥量,他们在构造的时候锁定互斥量,析构的时候自动解锁,从而保证互斥量的正确操作。
mutex类使用内部定义scoped_lock和scoped_try_lock定义两种lock_guard对象,分别执行lock() 和try_lock()。使用这类可以避免上面try_catch的麻烦。上面的代码改为:
mutex mu; mutex::scoped_lock lock(mu); //临界区操作
相关文章推荐
- Some Notes of Caffe Installation
- Some Notes of Python Interfaces Pycaffe (Caffe)
- TensorFlow人工智能引擎入门教程之十二 Caffe转换tensorflow并 跨平台调用
- TensorFlow人工智能引擎入门教程所有目录
- 安装caffe过程记录
- py-faster-rcnn训练笔记(ubuntu14.04+cuda7.5+cuDNNv3+Python2.7)
- 准确率, 召回率,mAP
- ubuntu 14.04上配置无GPU的Caffe(A卡机适用)
- caffe term: epoch, itr
- Ubuntu14.04 安装Caffe(仅CPU)
- deep learning for face detection (caffe C++)
- caffe+ubuntu14.04
- caffe中的iteration,batch_size, epochs理解
- Mac下Caffe安装-无GPU
- caffe solver.prototxt文件
- caffe模型的使用
- error :No module named google.protobuf.internal
- Extract CNN features using Caffe
- 配置Caffe+VS2013+CUDA 6.5+Windows 8.1 64位系统
- Caffe 深度学习框架及AlexNet结构