对BOOST 中同步互斥的一些理解 html
首先,BOOST中有4种有关互斥量得概念。
1.LOCKABLE :仅支持排它型全部权
2.TIMEDLOCKABLE:支持带超时的排它型全部权
3.SHAREDLOCKABLE: 支持带超时的排他型全部权和共享型全部权(读写锁)
4.UPGRADELOCKABLE:
支持带超时的排他型全部权和共享型全部权,以及共享型全部权升级为排他型全部权(升级过程阻塞)(也支持降级)
能够看到2强化自1,3强化自2.4强化自3,支持某一律念则必定支持其强化自的概念。
boost::mutex 实现了LOCKABLE概念 (boost::recursive_mutex 是其递归锁的版本)
boost::timed_mutex 实现了TIMEDLOCKABLE概念
(boost::recursive_timed_mutex 是其递归锁的版本)
boost::shared_mutex实现了SHAREDLOCKABLE概念
boost::shared_mutex一样实现了UPGRADELOCKABLE概念
出于提供RAII操做风格和安全等其余一些缘由BOOST不但愿用户直接调用各类MUTEX类型中的相关接口,而是经过它提供的一些LOCK_TYPE来帮助咱们调用。
主要的LOCK_TYPE包括:
boost::unique_lock<LOCKABLE> 针对支持LOCKABLE概念的类型(上述4中MUTEX类型都支持LOCKABLE概念)。以RAII的方式调用该类的lock()
(调用成功后排它的独占该互斥量)和 unlock() 方法。
boost::shared_lock<SHAREDLOCKABLE>针对支持SHAREDLOCKABLE概念的类型,boost::shared_mutex实现了该概念,注意,支持SHAREDLOCKABLE概念的类既支持排他的独占(写锁,经过调用lock unlock系列函数),也支持共享的方式占用(读锁,经过调用lock_shared系列),
shared_lock默认调用
lock_shared系列。
最主要最经常使用的就是上面这两个LOCK类型,分别表明独占方式和共享方式,其余的就不一一分析了。
下面是个从
http://hi.baidu.com/jrckkyy/blog/item/d7ccb508dfba2e3ce8248817.html
此处找到的例子
typedef
boost::shared_mutex rwmutex;
typedef
boost::shared_lock<rwmutex> readLock;
typedef
boost::uniq_lock<rwmutex> writeLock; rwmutex _rwmutex; void readOnly() { ... { // 临界区 readLock rdlock (_rwmutex); ... do something ... } ... } void writeOnly() { ... { // 临界区 writeLock wlock( _rwmutex); ... do something ... } ... }