C++ 如何允许在不过度使用 CPU 的情况下等待

How does C++ allow to wait without excessive CPU usage

比如我有代码

while (!something} {
    //waiting
}

它确实在等待一些东西,但它使用了很多CPU。 C++ 具有线程连接、条件变量等待、互斥锁等功能 - 允许等待,因此它确实会检查某些条件,但它的行为类似于空闲进程 - 不消耗 CPU 时间。它是如何完成的,有没有办法让 while 循环(或任何其他代码)表现得像这样?

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

OS 负责为您的进程和线程分配时间,您需要这些功能来控制(或者更确切地说,发出请求)该机制。

您的 C++ 标准库实现调用操作系统提供的 platform-specific 个函数。

如果不使用您已经列出的那种 C++ types/functions,就无法自己复制它:互斥锁和计时器(或者不自己调用那些 OS 函数,就像我们在过去的日子!)。你所能做的就是自旋锁,就像你已经演示过的那样。

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

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

事实上,这正是 std::condition_variable::wait 等标准函数的本质:对系统接口的抽象,在本例中会阻塞线程。 std::cin::operator>> 是阻塞线程执行的函数调用的另一个例子。