boost锁的概述

boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。

▲     mutex对象类

mutex类提供互斥量,主要有两种:boost::mutex,boost::shared_mutex,其中mutex有lock和unlock方法,shared_mutex除了提供lock和unlock方法外,还有shared_lock和shared_unlock方法。

因此,boost::mutex为独占互斥类,boost::shared_mutex为共享互斥类。

 shared_mutex因为具有计数功能可以用来实现读写锁。mutex只能实现互斥锁

■     lock模板类

boost::unique_lock<T>,boost::shared_lock<T>,其中unique_lock为独占锁,shared_lock为共享锁。unique_lock<T>中的T可以为mutex类中的任意一种,如果为shared_mutex,那么boost::
unique_lock<boost::shared_mutex>类的对象构造函数构造时,会自动调用shared_mutex的shared_lock方法,析构函数里,会自动调用shared_mutex的shared_unlock方法。如果是boost::
unique_lock<boost::mutex>,则分别自动调用lock和unlock方法。

boost::shared_lock<T>中的T只能是shared_mutex类。

◆     读写锁的实现

typedef boost::shared_lock<boost::shared_mutex> readLock;

typedef boost:: unique_lock<boost::shared_mutex> writeLock;

boost::shared_mutex  rwmutex;

void readOnly( )

{

readLock  rdlock( rwmutex );

/// do something

}

void writeOnly( )

{

writeLock  wtlock( rwmutex );

/// do something

}

对同一个rwmutex,线程可以同时有多个readLock,这些readLock会阻塞任意一个企图获得writeLock的线程,直到所有的readLock对象都析构。如果writeLock首先获得了rwmutex,那么它会阻塞任意一个企图在rwmutex上获得readLock或者writeLock的线程。

★互斥锁的实现

typedef boost:: unique_lock<boost::mutex> exclusiveLock;

延伸阅读:

1. mutex对象类

mutex类主要有两种:独占式与共享式的互斥量。

▲ 独占式互斥量:

mutex: 独占式的互斥量,是最简单最常用的一种互斥量类型

try_mutex: 它是mutex的同义词,为了与兼容以前的版本而提供

timed_mutex: 它也是独占式的互斥量,但提供超时锁定功能

▲ 递归式互斥量:

recursive_mutex: 递归式互斥量,可以多次锁定,相应地也要多次解锁

recursive_try_mutex: 它是recursive_mutex 的同义词,为了与兼容以前的版本而提供

recursive_timed_mutex: 它也是递归式互斥量,基本功能同recursive_mutex, 但提供超时锁定功能

▲ 共享式互斥量:

shared_mutex: multiple-reader/single-writer 型的共享互斥量(又称读写锁)。

其中mutex有lock和unlock方法,shared_mutex除了提供lock和unlock方法外,还有shared_lock和shared_unlock方法。

2. lock模板类

▲ 独占锁:

boost::unique_lock<T>,其中T可以mutex中的任意一种。

  如果T为mutex,那么boost::unique_lock<boost::mutex>,构造与析构时则分别自动调用lock和unlock方法。

  如果T为shared_mutex,那么boost::unique_lock<boost::shared_mutex>,构造与析构时则分别调用shared_mutex的shared_lock和shared_unlock方法。

注意:scoped_lock也是独占锁,其源代码中定义如下;

  typedef unique_lock<mutex> scoped_lock;

  typedef unique_lock<timed_mutex> scoped_timed_lock;

▲ 共享锁:

boost::shared_lock<T>,其中的T只能是shared_mutex类。

当然还有其他一些锁:lock_guard, upgrade_lock等。

转自:http://blog.csdn.net/huang_xw/article/details/8457599

boost锁的使用的更多相关文章

  1. boost锁的概述

    ●     boost锁的概述 boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁. ▲     mutex对象类 mutex类主要有两种:boost::mutex,b ...

  2. Boost锁~临界区保护和临界资源共享

    前言: 除了thread,boost::thread另一个重要组成部分是mutex,以及工作在mutex上的boost::mutex::scoped_lock.condition和barrier,这些 ...

  3. boost::thread 线程锁

    1.boost锁的概述: boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁. 2.mutex对象类(主要有两种): 1.boost::mutex(独占互斥类) --& ...

  4. boost::mutex::scoped_lock

    在三维重建过程中,世界地图 Map &world作为唯一 访问/更新 对象,可以使用boost::mutex::scoped_lock . 一:boost::mutex::scoped_loc ...

  5. boost多线程使用简例

    原文链接:http://www.cppblog.com/toMyself/archive/2010/09/22/127347.html C++ Boost Thread 编程指南 转自cnblog: ...

  6. boost 无锁队列

    一哥们翻译的boost的无锁队列的官方文档 原文地址:http://blog.csdn.net/great3779/article/details/8765103 Boost_1_53_0终于迎来了久 ...

  7. c/c++ 多线程 boost的读写(reader-writer)锁

    多线程 boost的读写(reader-writer)锁 背景:保护很少更新的数据结构时,c++标准库没有提供相应的功能. 例如:有个DNS条目缓存的map,基本上很少有更新,大部分都是读取,但是偶尔 ...

  8. boost 互斥体和锁

    1.共享资源是一个自动锁住的房间,互斥体是钥匙,进入房间必须取钥匙,离开房间应该还钥匙.这就对应着互斥体的lock(取钥匙)和unlock(还钥匙). 2.考虑下面的场景:还钥匙的时候出现异常,会发生 ...

  9. Boost无锁队列

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/okiwilldoit/article/details/50970408 在开发接收转发agent时, ...

随机推荐

  1. servlet第2讲(下集)----创建servlet实例(继承GenericServlet)

  2. ios控件 UIControl

    < UIControl> 1 处理用户事件的控件的基类,如UIButton,UISlider等 2 一般不直接实例化,而是使用他的子类 3 可以通过跟踪触摸事件来设置和获取控件状态,并且这 ...

  3. Linux查看CPU和内存使用情况 【转】

    Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...

  4. 搭建Ubuntu下c/c++编译环境【转】

    1.       安装Ubuntu. 2.       安装gcc 方法一: sudo apt-get  install  build-essential 安装完了可以执行 gcc--version的 ...

  5. 关于ckeditor过滤掉html样式标签之我见

    1.CKEDITOR编辑器属性可以通过修改/ckeditor/config.js文件来控制 //标签过滤默认是开启的,默认会过了<style>样式标签设置为true可关闭过滤config. ...

  6. error while loading shared libraries: libmcrypt.so.4

    /usr/local/php/sbin/php-fpm: error while loading shared libraries: libmcrypt.so.4: cannot open share ...

  7. zookeeper集群实例

    zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...

  8. POJ1556 The Doors 叉积+最短路

    题目大意:求从(0,5)到(10,5)的最短距离,起点与终点之间有n堵墙,每个墙有2个门. 题目思路:判断两点间是否有墙(判断两点的连线是否与某一堵墙的线段相交),建立一个图,然后最短路求出就可以了. ...

  9. 【iOS 】UIView 中有一个autoresizingMask的属性

    在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. 1 2 3 4 5 6 7 8 9 enum  ...

  10. 一个不错的PHP文件页面缓存类

    在php中缓存分类数据库缓存,文件缓存和内存缓存,下面我来给各位同学详细介绍PHP文件缓存类实现代码,有需要了解的朋友可参考. 页面缓存类 <?php    /*    * 缓存类    cac ...