C ++如何允许在不占用过多CPU的情况下进行等待

时间:2019-06-15 17:57:17

标签: c++ wait

例如我有代码

while (!something} {
    //waiting
}

它确实等待某事,但是它占用大量CPU。 C ++具有诸如线程连接,条件变量等待,互斥锁(允许等待)的功能,因此它可以检查某些条件,但其行为类似于空闲进程-不消耗CPU时间。

如何完成它以及如何使 while 循环(或其他任何代码)表现得如此?

2 个答案:

答案 0 :(得分:1)

这些是操作系统必须支持的功能。

操作系统负责为您的进程和线程分配时间,并且您需要这些功能来控制(或向其发出请求)该机制。

您的C ++标准库实现调用您的操作系统提供的特定于平台的功能。

没有使用您已经列出的C ++类型/函数(互斥体和计时器)(或者没有像过去那样调用自己的OS函数的方法)就无法复制自己。您只能做一个旋转锁,就像您已经演示过的那样。

答案 1 :(得分:1)

您可以通过调用阻止线程执行的系统调用来实现。

通常不直接调用系统,而是使用包装函数,这是对系统特定细节的抽象。这种方法使您的程序可以移植到不同的系统。

实际上,这正是诸如std::condition_variable::wait之类的标准函数的含义:通过系统接口的抽象,在这种情况下,它将阻塞线程。 std::cin::operator>>是另一个阻止线程执行的函数调用示例。