05 December 2012

Маленькая задачка по C++

Часто бывает так, что в классе полем лежит объект, с которым работать надо только через мьютекс. 

Вот пример из нашего кода, имеется некий объект -- хранилище статистики по работе класса --плюс защищающий его мьютекс:

class IvOverlay
{
    Platform::Mutex m_mutexStat;
    OverlayStat m_stat;

    // ... 

    void Render() 
    {
        // ...

        {
            Platform::MutexLocker _(m_mutexStat);
            m_stat.AddRenderTime( tProf.Get() );
        }
        
    }
    
    // ...

    void PutMsg(const Cmd& cmd, int sz = 0) 
    {
        // ...
        
        {
            Platform::MutexLocker _(m_mutexStat);                
            m_stat.PushFrameToQueue();
        }
        
    }    
    
};

В задаче спрашивается -- как все это дело написать изящнее, желательно еще и так, чтобы случайно где-то не полезть к объекту напрямую без защиты. 
Варианты а) встроить мьютекс в сам объект статистики и б) передавать в некий защищенный мьютексом метод функтор с желаемым действием -- не предлагать. 

Идеи? 

No comments:

Post a Comment