随笔-5  评论-31  文章-0  trackbacks-0
首先,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 
... 

... 







posted on 2011-05-26 01:10 江浸月 阅读(3917) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理