首页 > C++ 互斥锁和条件变量实现读写锁

C++ 互斥锁和条件变量实现读写锁

最近的诸多面试经历确实让自己发现内功还不够,还需要持续的学习精进。

实现如下:

class RWLock{ private:int state;mutex mu;condition_variable cond;public:RWLock():state(0){ }void rlock(){ mu.lock();while(state < 0){ cond.wait(mu);}state++;mu.unlock();}void runlock(){ mu.lock();if(--state == 0) { cond.notify_one();//叫醒一个等待的写操作}mu.unlock();}void wlock(){ mu.lock();while(state!=0){ cond.wait(mu);}state = -1;mu.unlock();}void wunlock(){ mtx.lock();  stat = 0;  cond.notify_all(); // 叫醒所有等待的读和写操作  mtx.unlock();  }
}

更多相关:

  • 协议36.508 4.5节 有个表格写的很清楚: Table 4.5.2.3-1: UE registration procedure (state 1 to state 2)...

  • 使用栈实现四则运算,支持+,-,*,/,(,) 输入为字符串,输出为计算好的数值,如不符合四则运算的规定,则异常退出 这个实现借用了栈以及字符处理状态机的思想: 维护两个栈:一个用于数值,另一个用于存放计算符号字符状态机用于遍历输入的字符串过程中进行对应数值处理和计算符号处理的状态转换 在第一个思想中:符号栈中存在优先级,即*和...

  • 因为函数参数是按值传递的,所以要想改变变量,必须传递地址。 二级指针实际上就是指针变量的地址,如果传递二级指针,函数声明必须写**。 (void**)&必须是本质上就是指针变量的地址才可以做这样的转换,并不是说把一个一级指针也可以转换,void**的本质是标识一个二级指针。 &data就是(默认数据类型 **)&data,(void...

  • 文章目录1. 解决问题2. 应用场景3. 实现如下:C++实现C语言实现4. 缺点 1. 解决问题 在工厂方法模式中,我们卖衣服。此时我们为每一种衣服创建不同的工厂,帽子有一个工厂专门创建,裤子有一个工厂专门创建,T恤有一个工厂专门创建。这样的方式保证了代码设计的开闭原则(对扩展开发,对修改关闭),解决了简单工厂模式中暴露的...

  • 转载于:http://blog.csdn.net/u012819339/article/details/50654764   实体作品请参看优酷视频。 若以上链接点击无效请把该链接地址复制到浏览器地址栏 http://v.youku.com/v_show/id_XODYzODczNzQ4.html 说明: 该作品为arvik于2014...

  • - (void)viewDidLoad {[super viewDidLoad];NSLog(@"我在玩手机");NSLog(@"手机没电了");[self chargeMyIphone:^{NSLog(@"出门逛街");}];NSLog(@"我在看电视"); }-(void)chargeMyIphone:(void(^)(void...

  • http://stackoverflow.com/questions/150446/how-do-i-detect-when-someone-shakes-an-iphone 我的实现(基于Eran Talmor): 没必要application.applicationSupportsShakeToEdit = YES; Set th...