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),可能吗?实际上,我也不知道其他两个会如何终止,除非 xc 被另一个线程修改。 为什么会停在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这题咋做

套接字对、perl、KEEPALIVE 和轮询

LTC6804 起动导线开路ADC转换和轮询转换指令(ADOW)

Sprint 集成 DSL - Http 入站适配器和轮询器

Endles循环(while循环)运行,直到我按下一个键。编程C

Jenkins定时构建和轮询SCM设置说明