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*.

  • 相关阅读:
    一文摸透从输入URL到页面渲染的过程
    JavaScript实现哈希表
    JavaScript数据结构与算法博客目录
    JavaScript实现图结构
    从宏观到细节为你讲解前端性能优化
    详解HTTP协议
    JavaScript实现排序算法
    Google Stadia免费试用两个月
    安卓手机调成黑白屏幕
    UWP Xbox上隐藏键盘⌨
  • 原文地址:https://www.cnblogs.com/livingintruth/p/2383931.html
Copyright © 2011-2022 走看看