自已写的Row Locking的实现,请大家指点一下是否有有关问题

自已写的Row Locking的实现,请大家指点一下是否有问题
发贴问CSND的朋友,Row   Locking的实现,没有人回答,就自已根据自已的需要写了一个,请大家给点建立,如,死锁如何处理等(大学学习时有个什么银行家算法,不知到那有原代码)
代码很简单,如下
#include   "StdAfx.h "
#include   ".\rowlocker.h "

//==================================================ROWLOCK=======================================================
BOOL   RowLock::acquireShared(WORD   &Ref,BYTE   &Flage)
{
while(true)
{
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
if((Flage   &   DB_LOCK_EXPLICIT)==   0     &&   (Flage   &   DB_LOCK_UPDATE)   ==   0)
{//没有EXPLICIT锁和UPDATE锁
Flage   |=   DB_LOCK_SHARED;
Ref   ++   ;
return   TRUE;
}
}
::SwitchToThread();
}
}

BOOL   RowLock::releaseShared(WORD   &Ref,BYTE   &Flage)
{
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
ACE_ASSERT(Ref   !=   0);
Ref   --   ;
if(Ref   ==   0)
Flage   &=   ~DB_LOCK_SHARED;
}
return   TRUE;
}

BOOL   RowLock::acquireExplicit(WORD   &Ref,BYTE   &Flage)
{
//获取DB_LOCK_UPDATE锁
while(true)
{
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
if((Flage   &   DB_LOCK_EXPLICIT)==   0     &&   (Flage   &   DB_LOCK_UPDATE)   ==   0)
{
Flage   |=   DB_LOCK_UPDATE;
break;
}
}
::SwitchToThread();
}

//转变DB_LOCK_UPDATE锁到DB_LOCK_EXPLICIT锁
while(true)
{
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
if((Flage   &   DB_LOCK_SHARED)   ==   0)
{
Flage   &=~DB_LOCK_UPDATE;
Flage   |=   DB_LOCK_EXPLICIT;
break;
}
}
::SwitchToThread();
}
return   TRUE;
}

BOOL   RowLock::releaseExplicit(WORD   &Ref,BYTE   &Flage)
{
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
ACE_ASSERT(Ref   ==   0);
Flage   &=   ~DB_LOCK_EXPLICIT;
}
return   TRUE;
}

BOOL   RowLock::ExplicitToShared(WORD   &Ref,BYTE   &Flage)
{
ACE_ASSERT((Flage   &   DB_LOCK_EXPLICIT)   !=   0   &&   Ref   ==   0);
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
Flage   &=   ~DB_LOCK_EXPLICIT;
Ref++;
Flage   |=   DB_LOCK_SHARED;
}
return   TRUE;
}

BOOL   RowLock::SharedToExplicit(WORD   &Ref,BYTE   &Flage)
{
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
ACE_ASSERT(Ref   !=   0   &&   (Flage   &   DB_LOCK_EXPLICIT)==   0     &&   (Flage   &   DB_LOCK_UPDATE)   ==   0);
Ref   --   ;
if(Ref   ==   0)
Flage   &=   ~DB_LOCK_SHARED;
Flage   |=   DB_LOCK_UPDATE;
}

//转变DB_LOCK_UPDATE锁到DB_LOCK_EXPLICIT锁
while(true)
{
{
ACE_Guard <ACE_Recursive_Thread_Mutex>   locker(m_cs);
if((Flage   &   DB_LOCK_SHARED)   ==   0)
{