【发布时间】:2014-03-15 03:43:12
【问题描述】:
我正在通过这里提到的多个读取器/写入器锁的实现 MultiplereadersWriterLock
这里 EnterReader 的代码是
void EnterReader(void)
{
EnterCriticalSection(&m_csWrite);
EnterCriticalSection(&m_csReaderCount);
if (++m_cReaders == 1)
ResetEvent(m_hevReadersCleared);
LeaveCriticalSection(&m_csReaderCount);
LeaveCriticalSection(&m_csWrite);
}
根据我对这个锁的理解,我们正在解决我们可以通过多个线程读取共享资源的问题。所以这意味着多个线程可以调用 EnterReader 函数并且不会阻塞它们可以继续读取。
例子
Thread T1 calls EnterReader()
It acquires m_csWrite
It acquires m_csReaderCount
Interrupted by CPU and thread T2 starts
Thread T2 calls EnterReader()
Since m_csWrite already acquired by T1 so how thread T2 can perform read.
T2 cannot proceed further since m_csWrite is already acquired that means T2 reader thread is blocked and waiting for T1 to get finish.
我很困惑这个实现如何解决多个读者访问共享资源的问题。
【问题讨论】:
标签: c++ multithreading locking