我有一个线程让我们称之为 t1,它会在 x 秒后定期发送一些东西。这个“x 秒部分”可以从其他线程 (t2)更改。我应该能够从线程 t1 执行以下操作。
- 等待“x 秒”然后发送一些东西
- 如果线程 t2 发送另一个 "x" 值,则不要发送,而是转到第 1 步。
我为此目的使用了条件变量 wait_for()
我只想在“x 秒”结束时发送。
目前我已经在没有谓词的情况下实现了它(因为我不需要它)是这样的:
auto done = wait_for(lock,x seconds);
if(done == cv_status::timeout)
{
/*perform send operation*/
}
但有时我会在 timeout 之前看到“发送发生”,我认为这是由于虚假唤醒和缺少谓词造成的。
我的问题是如何在没有谓词的情况下处理虚假唤醒?我应该为此采取另一种方法吗?我不需要谓词,因为线程 t1 在特定条件下休眠(当 x 为 0 时)并且我希望它(t1)在没有任何条件的情况下被 t2 唤醒。
这是我第一个使用 cond 变量的任务,我还在学习 CPP,提前谢谢你。