我有一个工作线程运行在一个循环中,有时会做工作。我想有一个经理线程keeps a watchful eye on whether the first thread has done any work recently。从线程共享一个时间戳到另一个
我认为最简单的方法是拥有一个包含时间戳的变量;当工作线程执行某些工作时,它会将当前时间写入变量,并且当管理线程想要检查工作线程时,它会从变量中读取时间并测量与当前时间的差异。
首先,这个变量需要是原子吗?我的本能是在线程之间进行通信时使用原子,但在这种情况下,没有读 - 修改 - 写周期,只有一个线程正在进行更新。时间值应该足够小以适合一个单词,因此也许不用担心字词撕裂。是否应该鼓励在线程之间及时传播?如果没有,分享时间戳的正确方法是什么?
其次,代表时间戳的合适类型是什么,以及如何获取它的实例? std :: time :: Instant似乎是明显的选择,但它不是同步或发送,而且我不知道如何拥有一个原子。有更好的选择吗?
如果一个线程正在写,这是绝对必须的原子或以其他方式同步。你也不一定需要时间戳;一个简单的原子旗可以做,如果你想知道的是“自上次检查后线程做了什么?”。 –