C中的电源效率while循环和轮询[关闭]
Posted
技术标签:
【中文标题】C中的电源效率while循环和轮询[关闭]【英文标题】:Power efficiency in C while loops & polling [closed] 【发布时间】:2016-04-11 21:11:53 【问题描述】:我听说可以说:
while(1)
i = !2;
wait(1);
省电。这个 while 循环是否在 i != 2
处停止,因此不进行轮询?比方说:
while(x == 3)
if(c == 3)
x = 4;
wait(1);
这是否遵循类似的概念,或者i = !2
是为了继续 while 循环而必须满足的过程?你会说这和节能一样吗? 第二个示例在电源效率方面与第一个示例相似吗?
我使用糟糕的节能轮询的一个例子是:
while (x == 3)
【问题讨论】:
你的第一个循环永远不会终止。你的意思是while(i)
,可能吗?实际上,我也不知道其他两个会如何终止,除非 x
或 c
被另一个线程修改。
为什么会停在i = !2
?这只是一个任务,它会立即发生。两个循环只有在到达 wait(1)
时才会停止。
C 编译器不关心“权力”。在您的第一个示例中,一个好的优化编译器会将赋值移出循环。
而且您错误地调用了wait()
。 Unix wait()
函数的参数是一个指向整数的指针,用于接收退出的子进程的状态。
相关:***.com/questions/937713/is-it-better-to-poll-or-wait
【参考方案1】:
从效率的角度来看,重要的是代码不只是不断循环。在您的示例中,大概是 wait()
函数将控制权返回给您的操作系统,以便它可以立即分派另一个任务。
简而言之,是的,假设wait()
将控制权返回给操作系统,您的第二个示例也很节能。
【讨论】:
以上是关于C中的电源效率while循环和轮询[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
各位懂软件,的分别使用while和do…whil循环输出1—10之间的所有数字,包括1和10这题咋做
LTC6804 起动导线开路ADC转换和轮询转换指令(ADOW)
Sprint 集成 DSL - Http 入站适配器和轮询器