boost中的读写锁

      开发高性能的并发应用时遇到的问题常可以归结到读写锁模式。利用boost thread库,可以很简单地实现一个读写锁(搜索就有了)。不过老猫告诉我boost thread库本来就包含读写锁了。呵呵。我一开始以为省了我很多功夫,结果后来花的时间更多。因为boost实现的是传统读写锁的refinement。boost的锁分为三级:shared_lock,这个可以看作是传统的读锁;upgrade_lock,我一开始搞混了,以为这个是写锁,其实不是;unique_lock,当当当,这个才是传统的写锁。什么是upgrade_lock,它的最大特点就是与shared_lcok不互斥,与别的upgrade_lock和unique_lock互斥。
      也就是说线程A获得mutex的upgrade_lock后,线程B、C等还可以获得mutex的share_mutex。反之亦然。另外,upgrade_lock可以升级为upgrade_to_unique_lock。据boost文档说也可以downgrade成shared_lock,但我没找到相关的锁类型,不过自己实现也不难,因为UpgradeLockable Concept需要提供以下几个函数:
      void unlock_upgrade_and_lock();  //  从upgrade升级到unique
      void unlock_and_lock_upgrade();  // 从unique降级到ungrade
      void unlock_upgrade_and_lock_shared(); // upgrade降级到shared
      是不是觉得很不爽?少了shared升级成upgrade的。这肯定是有原因的。不过目前我还没领悟。事实上我都不知道为什么要加入upgrade这一级锁——以后领悟了再说吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值