对BOOST 中同步互斥的一些理解

原创
2013/02/18 19:00
阅读数 945

对BOOST 中同步互斥的一些理解

首先,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 
... 

... 
展开阅读全文
加载中
点击加入讨论🔥(1) 发布并加入讨论🔥
打赏
1 评论
0 收藏
0
分享
返回顶部
顶部