利用boost提供的库构建读写锁与互斥锁
来源:互联网 发布:软件外包上市公司 编辑:程序博客网 时间:2024/05/16 17:14
http://hi.baidu.com/cpuramdisk/item/3fcd94cc6d05c53198b498f0
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也提供了递归锁的实现, 这里并不对其进行描述。
- 利用boost提供的库构建读写锁与互斥锁
- 利用boost提供的库构建读写锁与互斥锁
- boost库读写锁与互斥锁的用法解析
- boost库 学习笔记一 boost::share_mutex 互斥锁 读写锁
- Boost 库的构建工具
- BOOST模板库实现的功能与lua在语言层级提供的支持之比较
- .NET Framework中提供的读写锁
- linux、Windows、boost库读写锁
- boost提供的智能指针
- boost读写锁
- boost读写锁
- boost 读写锁
- Boost 读写锁
- boost读写锁
- boost中的读写锁
- boost读写锁实现
- boost库读写xml
- c++ boost 库中提供的share_ptr(智能指针)
- 如何在android 中编译alsa-utils工具
- socket 连接器
- Linux下core文件调试方法
- fedora16下Samba服务的配置
- 查询oracle锁定的表及杀掉锁表的进程
- 利用boost提供的库构建读写锁与互斥锁
- 汇编中断大全
- Java基于端口监听的防止重复启动方案
- Android程序首页Loading效果
- 开贴聊八大排序算法之直接插入排序(一)
- sqlserver中分区函数 partition by的用法
- cocos2d-X学习之坐标系统
- java创建对象:new和newInstance的不同
- Eclipse下JAVA编译小问题