私はループで動作しているワーカースレッドを持っています。私はマネージャスレッドを持っています。keeps a watchful eye on whether the first thread has done any work recently。スレッドからタイムスタンプを共有する
これを行う最も簡単な方法は、タイムスタンプを含む変数を持つことです。ワーカースレッドが何らかの作業をしたときに変数に現在時刻を書き込み、マネージャースレッドが作業者をチェックしたいときは変数から時刻を読み取り、現在時刻との差を測定します。
まず、この変数はアトミックである必要がありますか?私の本能は、スレッド間で通信する際にアトミックを使用することですが、この場合、リード・モディファイ・ライト・サイクルはなく、1つのスレッドだけがアップデートを行っています。時間の値は1つの単語に収まるほど小さくなければならないので、恐らく単語の引き裂きに対する心配はありません。何らかの理由でスレッド間のタイムリーな伝播を促進するためには依然として原子的でなければならないのでしょうか?そうでない場合、タイムスタンプを共有する正しい方法は何ですか?
第2に、タイムスタンプを表すのに適したタイプは何ですか?また、そのインスタンスを取得するにはどうすればよいですか。 std :: time :: Instantは明らかな選択肢のように思えますが、それは同期または送信ではなく、どうやって原子1を持つのか分かりません。より良い選択肢がありますか?
場合、それは絶対に原子あるいは同期させる必要があります。タイムスタンプは必ずしも必要ではありません。あなたが知りたいのは、前回チェックしたときからスレッドが何かをしているかどうかだけであれば、単純なアトミックフラグができます。 –