加载中…
个人资料
岩岩爸
岩岩爸
  • 博客等级:
  • 博客积分:0
  • 博客访问:53,709
  • 关注人气:9
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

利用boost提供的库构建读写锁与互斥锁zz

(2010-06-28 11:10:13)
标签:

it

分类: C++/C
boost库中提供了的mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。
一种简易的构建方法如下:
首先看看mutex类,主要用到下面两种.

mutex类:
boost::mutex,  boost::shared_mutex
其中mutex主要有lock与unlock方法,shared_mutex除了提供lock与un_lock方法之外,还有 shared_lock与shared_unlock方法。


lock模板
boost::uniq_lock<T>
boost::shared_lock<T>

其中uniq_lock<T>中T的可以为mutex类中的任意一种,只要其提供了lock与unlock方法即可,但是也可以为 shared_mutex,如果是shared_mutex,那么在boost::uniq_lock<boost::shared_mutex>类的对象构造函数构造时候, 会自动调用shared_mutex的shared_lock方法,析够函数里,会自动调用shared_mutex的shared_unlock方法; 如果是boost::uniq_lock<boost::mutex>,则与之对应,分别自动调用lock与unlock方法。那么,我们可 以定义以下的类型来实现读写锁:

typedef boost::shared_mutex rwmutex;
typedef boost::shared_lock<rwmutex> readLock;
typedef boost::uniq_lock<rwmutex> writeLock;

rwmutex  _rwmutex;

void readOnly()
{
...
{ // 临界区
readLock(_rwmutex) rdlock;
...
do something
...
}
...
}

void writeOnly()
{
...
{ // 临界区
writeLock(_rwmutex) wlock;
...
do something
...
}
...
}

对同一个rwmutex, 线程可以同时有多个readLock,这些readLock会阻塞任意一个企图获得writeLockd的线程,直到所有的readLock对象都析够。 如果writeLock首先获得了rwmutex,那么他会阻塞任意一个企图在该rwmutex上获得readLock或者writeLock的线程。

实现互斥锁更容易一点。
只需要typedef boost::uniq_lock<boost::mutex>  exclusiveLock;

boost::mutex _mutex;


void exclusiveFoo()
{
...
{ //临界区
exclusiveLock(_mutex) exLock;
do something...
}
...

}


除此之外,boost也提供了递归锁的实现, 这里并不对其进行描述。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有