我有一個工作線程運行在一個循環中,有時會做工作。我想有一個經理線程keeps a watchful eye on whether the first thread has done any work recently。從線程共享一個時間戳到另一個
我認爲最簡單的方法是擁有一個包含時間戳的變量;當工作線程執行某些工作時,它會將當前時間寫入變量,並且當管理線程想要檢查工作線程時,它會從變量中讀取時間並測量與當前時間的差異。
首先,這個變量需要是原子嗎?我的本能是在線程之間進行通信時使用原子,但在這種情況下,沒有讀 - 修改 - 寫週期,只有一個線程正在進行更新。時間值應該足夠小以適合一個單詞,因此也許不用擔心字詞撕裂。是否應該鼓勵在線程之間及時傳播?如果沒有,分享時間戳的正確方法是什麼?
其次,代表時間戳的合適類型是什麼,以及如何獲取它的實例? std :: time :: Instant似乎是明顯的選擇,但它不是同步或發送,而且我不知道如何擁有一個原子。有更好的選擇嗎?
如果一個線程正在寫,這是絕對必須的原子或以其他方式同步。你也不一定需要時間戳;一個簡單的原子旗可以做,如果你想知道的是「自上次檢查後線程做了什麼?」。 –