#pragma once
/**************************************************
写优先读写锁
读效率比 WINDOWS 的 SRWLOCK 慢一倍左右,百万级读锁要156ms(78ms)
写效率比 WINDOWS 的 SRWLOCK 慢 N 倍,百万级写锁要1516ms(62ms)
CKSRWLock 读写锁实现
CAutoLockRead 读锁的自动化(RAII 机制)
CAutoLockWrite 写锁的自动化(RAII 机制)
使用方法(代码示例):
CKSRWLock ksrwLock;
void Read()
{
CAutoLockRead lock(ksrwLock);
// TODO:读的代码
}
void Write()
{
CAutoLockWrite lock(ksrwLock);
// TODO:写的代码
}
**************************************************/
#include <cassert>
class CKSRWLock
{
public:
void LockWrite()
{
// 写等待的计数变量
assert(m_refWriteWaitCount >= 0);
InterlockedIncrement(&m_refWriteWaitCount);
// 临界区
EnterCriticalSection(&m_csWrite);
// 不可读
ResetEvent(m_eventReadEnable);
// 互斥
InterlockedExchangeAdd(&m_refCount, -m_clMAX_READ);
// 等待所
写优先读写锁,读效率比 WINDOWS 的 SRWLOCK 慢一倍左右,百万级读锁要156ms
最新推荐文章于 2024-05-06 08:23:54 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)