• boost锁的使用


       boost锁的概述

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

     

         mutex对象类

    mutex类提供互斥量,主要有两种:boost::mutexboost::shared_mutex,其中mutexlockunlock方法,shared_mutex除了提供lockunlock方法外,还有shared_lockshared_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_mutexshared_lock方法,析构函数里,会自动调用shared_mutexshared_unlock方法。如果是boost:: unique_lock<boost::mutex>,则分别自动调用lockunlock方法。

    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

  • 相关阅读:
    玩裸机s3c2440资料集合
    windows7与虚拟机fedora 9.0文件共享
    仪表运算放大器INA333
    sql语句中的 case.. when...then ...else 用法
    JS判断RadioButtonList是否有选中项
    SQL SERVER 2005 同步复制技术
    软件安全性标准
    div+css网页标准版式布局
    ComboBox和SelectedIndexChanged(转)
    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
  • 原文地址:https://www.cnblogs.com/catkins/p/5270468.html
Copyright © 2020-2023  润新知