BOOL CReadWriteLock::WriteLock()
{
        CAutoLock Lock(mLock);

        DWORD CurrentThreadId = GetCurrentThreadId();
        std::map<DWORD, BaseLib::CCriticalSection*>::iterator iter
                = mThreadLockMap.find(CurrentThreadId);
        if (iter == mThreadLockMap.end())
        {
                BaseLib::CCriticalSection* CriticalSection = new BaseLib::CCriticalSection;
                mThreadLockMap[CurrentThreadId] = CriticalSection;
        }
        
        iter = mThreadLockMap.begin();
        TRACE(_T("[WriteLock]\n"));
        for (; iter != mThreadLockMap.end(); ++iter)
        {
                iter->second->Lock();
        }
        return TRUE;
}

BOOL CReadWriteLock::WriteUnLock()
{
        CAutoLock Lock(mLock);
        
        std::map<DWORD, BaseLib::CCriticalSection*>::iterator iter
                = mThreadLockMap.begin();
        TRACE(_T("[WriteUnLock]\n"));
        for (; iter != mThreadLockMap.end(); ++iter)
        {
                iter->second->UnLock();
        }
        return TRUE;
}

대략 WriteUnLock에서 CAutoLock Lock(mLock)에서 멈춰버림....