1

如果同一类中有 2 个以下方法。

  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 我没有机会解锁,因为它会在解锁之前返回。我的意思是:Lock(); 返回 m_iTimerDelay;开锁(); 它会起作用吗?将 Lock/UnLock 应用于 setter 不是问题。

任何想法来同步这些方法?

问候,库拉姆。

4

1 回答 1

3

使用RAII。创建一个对象,其构造函数获取锁,而其析构函数释放它。然后你可以这样做:

{
    ScopedLock f(m_hSettingsLock);
    return m_iTimerDelay;
}

让我们ScopedLock::~ScopedLock释放锁。

或者,最有可能的劣势:

{
    Lock();
    bool ret = m_iTimerDelay;
    Unlock();
    return ret;
}

请注意,在这两种情况下,返回的值都可能是陈旧的。

于 2013-10-23T06:00:15.713 回答