C++ 自带的临界区、Mutex等只支持唯一锁,这对性能是有很大影响的。

Boost提供共享锁功能,能够对读写区分加锁。


// 头文件

#include <boost/thread/shared_mutex.hpp>

#include <boost/thread.hpp>


typedef boost::shared_mutex                Lock;                    

typedef boost::unique_lock<Lock>    WriteLock;

typedef boost::shared_lock<Lock>    ReadLock;

Lock  myLock;           mutex对象定义

void ReadFunc()

{

     // 之前没有影响

    ReadLock  r_lock(myLock);         // 加读锁

    // 作用域到最后一行,也可以使用{}包含代码表示作用域

    //  处理代码

}

void WriteFunc()

{

    WriteLock  w_lock(myLock);      // 加写锁

    // 处理代码

}

锁住的对象都是myLock; 

可以同时加多个读锁,

但是一旦加写锁时,就不能加别的读锁和写锁