【发布时间】:2020-07-01 11:08:33
【问题描述】:
这是一个更理论的问题。我见过std::condition_variable 的几个例子,它似乎让线程进入睡眠状态,直到满足条件。这是某种种族标志,是有道理的。
但似乎如果一个变量总是被改变,那么一个线程可能会被唤醒检查条件并再次进入睡眠状态,因为当谓词为真时它没有跟上捕捉情况,所以我可能会将线程放入“昏迷”。
那么,std::condition_variable在我经常更换的这种情况下使用它不安全吗?
【问题讨论】:
-
请在问题中包含一个示例。
-
您的意思是像向线程发出信号表明它应该做某事,然后您在“做某事”和“什么都不做”之间频繁切换?只是不要这样做。给线程发一次信号
-
condition_variable的等待在您通知时唤醒。目的,就是你等到条件满足。因此,一旦满足条件(或至少有机会),您应该随后通知它。也有无规律的唤醒——所以要确保你有一个真实的唤醒条件。您还需要互斥锁来保护您更改的变量。 -
这是可能的,但是设置条件变量的线程做错了,或者线程没有从条件中唤醒是一个有效的结果
-
如果你把“理论问题”变成一个关于代码的具体问题会很好。目前的答案或多或少:没有条件变量不是不安全的。它们可能会被错误地使用,但几乎任何事情都是如此。
标签: c++ multithreading