例如我有代码
while (!something} {
//waiting
}
它确实等待某事,但是它占用大量CPU。 C ++具有诸如线程连接,条件变量等待,互斥锁(允许等待)的功能,因此它可以检查某些条件,但其行为类似于空闲进程-不消耗CPU时间。
如何完成它以及如何使 while 循环(或其他任何代码)表现得如此?答案 0 :(得分:1)
这些是操作系统必须支持的功能。
操作系统负责为您的进程和线程分配时间,并且您需要这些功能来控制(或向其发出请求)该机制。
您的C ++标准库实现调用您的操作系统提供的特定于平台的功能。
没有使用您已经列出的C ++类型/函数(互斥体和计时器)(或者没有像过去那样调用自己的OS函数的方法)就无法复制自己。您只能做一个旋转锁,就像您已经演示过的那样。
答案 1 :(得分:1)
您可以通过调用阻止线程执行的系统调用来实现。
通常不直接调用系统,而是使用包装函数,这是对系统特定细节的抽象。这种方法使您的程序可以移植到不同的系统。
实际上,这正是诸如std::condition_variable::wait
之类的标准函数的含义:通过系统接口的抽象,在这种情况下,它将阻塞线程。 std::cin::operator>>
是另一个阻止线程执行的函数调用示例。