您的位置:首页 > Web前端

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);
//临界区操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  caffe