簡體   English   中英

在多線程應用程序中,如何使用原子內置函數來設置/查看time_t值?

[英]In a multithreaded app, how would I use the atomic builtins to set/view a time_t value?

我有一個高度線程的應用程序。

此應用程序中的線程從共享內存映射文件中讀取。 你可以假設他們從不寫信。

現在我需要做的是擴展它,以便當讀者完成從文件中讀取時,它將更新共享時間戳。 time_t last_access_time = time(NULL);

這種情況經常發生,我寧願在可能的情況下搜索無鎖實現。

我如何使用G ++中的原子內置來設置或檢查last_access_time的當前值?

例如,假設我有這些類成員,並且_last_access_time被初始化為time(NULL)

time_t _last_access_time;

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

void GetLastAccessTime(){
     return _last_access_time;
}

是否有可能使其無鎖?

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;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM