1

我有一个高度线程化的应用程序。

此应用程序中的线程从共享内存映射文件中读取。你可以假设他们从不写信给它。

现在我需要做的是扩展它,以便当阅读器完成对文件的读取时,它将更新共享时间戳。IEtime_t last_access_time = time(NULL);

这种情况经常发生,如果可能的话,我宁愿搜索无锁实现。

我将如何设置或检查last_access_time在 G++ 中使用原子内置函数的当前值?

例如假设我有这些类成员并_last_access_time初始化为time(NULL)

time_t _last_access_time;

void UpdateLastAccessTime(){
     _last_access_time = time(NULL);
}

void GetLastAccessTime(){
     return _last_access_time;
}

是否可以使其无锁?

4

1 回答 1

4
class SomeClass
{
public:
    inline
    SomeClass ()
        : m_lastAccessTime (0)
    { ; }

    inline void
    UpdateLastAccessTime ()
    {
        time_t crtTime = time (NULL);
        time_t lastTime = m_lastAccessTime;

        while (crtTime > lastTime)
        {
            lastTime = __sync_val_compare_and_swap (
                &m_lastAccessTime,
                lastTime,
                crtTime);
        }
    }

    inline time_t
    GetLastAccessTime () const
    {
         return m_lastAccessTime;
    }

private:
    volatile time_t m_lastAccessTime;
};
于 2011-02-19T07:28:48.927 回答