如果同一类中有以下两种方法。
bool CSettings::GetDelayTimer()
{
return m_iTimerDelay;
}
void CSettings::SetDelayTimer(int iTimerdelay)
{
m_iTimerDelay = iTimerdelay;
}
为了同步上面的方法,我创建了以下锁定/解锁方法。
void CSettings::Lock()
{
DWORD dwRet = WaitForSingleObject(m_hSettingsLock, INFINITE);
if( dwRet == WAIT_OBJECT_0)
return;
}
void CSettings::UnLock()
{
ReleaseMutex(m_hSettingsLock);
}
如何使用锁定/解锁来同步这些getter / setter方法。如果我在getter方法中使用lock,我将无法解锁,因为它会在解锁之前返回。 我的意思是说: 锁(); return m_iTimerDelay;开锁(); 它会起作用吗? 将Lock / UnLock应用于setter不是问题。
同步这些方法的任何想法?
此致 Khurram。
答案 0 :(得分:3)
使用RAII。创建一个对象,其构造函数获取锁并且其析构函数释放它。然后你可以这样做:
{
ScopedLock f(m_hSettingsLock);
return m_iTimerDelay;
}
让ScopedLock::~ScopedLock
释放锁定。
或者,最可能是次等:
{
Lock();
bool ret = m_iTimerDelay;
Unlock();
return ret;
}
请注意,在这两种情况下,返回的值都可能是陈旧的。