测试发现,boost thread库实现的读写锁是读优先的(这一点我现在也不确定了,发现读写锁与运行平台关系太大了,windows 或linux,AMD还是intel,常常导致测试结果大相径庭)。所以当读线程多的时候,几乎无法获取写锁。大部分时候,写优先也许更符合应用的需求。我参考网上代码,使用boost条件变量和临界区,实现了一个写优先的读写锁。优点是写优先,而且代码逻辑很清晰,缺点是……效率可能比较低。为什么说可能而不是给出量化数据,是因为我发现不同的读写锁实现,效率与运行的平台关系太大了。代码如下:
#pragma once
#include <boost/thread.hpp>
class read_write_mutex
{
public:
read_write_mutex()
: read_cnt(0)
, write_cnt(0)
, wait_write_cnt(0)
{
}
~read_write_mutex(){}
void lock_read()
{
boost::mutex::scoped_lock lock(mutex);