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这一级锁——以后领悟了再说吧。

你可能感兴趣的:(c/cpp)