[英]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.