zoukankan      html  css  js  c++  java
  • boost::thread中的锁

    http://www.boost.org/doc/libs/1_46_1/doc/html/thread/synchronization.html

    mutex 是mutual exclusion(互斥), 是一个概念 ,    A mutex object facilitates protection against data races and allows thread-safe synchronization of data between threads, 这句话描述了mutex object的作用, 在这篇文档中, 定义了几4种 mutex concept,  每种concept都有对应的几个接口来阐述这种concept.  4种concept分别是lockable, timedLockablek, sharedLocable, upgradeLocable,每种concept所应该拥用的接口(功能)见文档中的定义. mutex object从概念上讲是一种资源,像内存一样

    boost::thead库中定义了几个类, 其中每个都实现了一个或几个相关的concept,  现在主要提到 class mutex ; class shared_mutex,    mutex实现了lockable, 而shared_mutex四种concept都实现了, 因此, shared_mutex应该是从代码上来说复杂很多

    在boost::thread中还定义一系列LockTypes, 都是类模板,而模板中的类型参数指的是 代表互斥量 的类型, 这当中最基本和简单的是lock_guard, 在构造时调用mutex.lock(), 析构时调用mutex.unlock(), 这实现了简单的 RAII-style locking of a Lockable object  (关于RAII (Resource Acquisition is Initialization), 是一种利用对象生命周期来控制程序资源的简单技术) ,lock_guard除constructor, destructor外并没有提供其它的接口让我们使用

    shared_lock, unique_lock   都提供了lock(), unlock(), bool owns_lock()三种方法, 在unique_lock中, lock(),unlock()分别调用mutex->lock() , mutex->unlock(), 在shared_lock中lock(), unlock()分别调用mutex->lock_shared(), mutex->unlock_shared(),  owns_lock返回是否拥有mutex当前 当然在构造函数若要lock()都是调用模板类自己的lock(), 而且的构造函数中可以不调lock(),因此可以推迟m->lock().

    我们工程中用shared_lock, unique_lock定义自己用的读写锁  

    1 typedef shared_lock<shared_mutex> ReadLock;  
    2 typedef unique_lock<shared_mutex> WriteLock;

    对于unique_lock还有mutex()和release()方法,  mutex()返回内部存的Mutex*,  release()还不知道在实际code中可以有什么用, release()不调用m->unlock(),但是把内部的is_locked标记为false, 并且 m = null, 然后返回之前的Mutex*.

  • 相关阅读:
    第六章 类(Class) 和对象(Object)
    如何在windows Server 2008虚拟机上安装SQLServer2008数据库
    小票打印机乱码问题
    SQLSERVER 的联接查询写法
    VMware下安装CentOS6.5
    疯狂java讲义--笔记
    学习Java第一篇——Java 安装及环境搭配
    informix数据迁移工具使用介绍
    informix 存储过程结构
    输入身份证号码自动读取生日与性别(delphi)
  • 原文地址:https://www.cnblogs.com/livingintruth/p/2383931.html
Copyright © 2011-2022 走看看