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

 

posted on 2012-03-12 17:14  小宇2  阅读(951)  评论(0编辑  收藏  举报

导航