gpt4 book ai didi

C++ While(1) 循环不在其中调用 if 语句

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:01 27 4
gpt4 key购买 nike

我有一个设置标志的中断,一个名为 recvd 的 bool 值:

while (radio.available())
{
// Fetch the payload, and see if this was the last one.
radio.read( &receive_payload, len );
recvd = 1;
radio.writeAckPayload(1,&ack,sizeof(ack));
}

在我的 main() 中,我有一个 while(1) 循环和一个简单的 if 语句来检查标志是否已设置为 1:

// forever loop
while(1){
if (recvd == 1){toFloat(12);recvd = 0;}
}
}

这个函数永远不会被调用,即使我可以在中断处理程序中放置一个 printf 来为 recvd 提供值并且它吐出 1。有任何想法吗?有趣的是,当我将一个随机字符 printf 放在 while 语句的根部时,if 子句被调用。

最佳答案

这是多线程编程警告的一个很好的例子。实际上,有两个:

  1. 编译器级优化。如果您的编译器可以就值和执行路径提出建议,它可以优化您的代码。有时,它的作用非常显着(正如 Shafik Yaghmaour 在上面的评论中提到的那样)。

  2. CPU 级优化。与编译器创建的代码相比,现代处理器可以以非常不同的方式执行您的代码。这里最著名的是“乱序执行”,它帮助 CPU 最大化代码速度并增加内存/传送带/等吞吐量。因此,如果您的 CPU 确定这两个语句之间没有关联,那么它们是按原始顺序执行还是按相反顺序执行都没有区别。因此,一个线程可以先于另一个线程运行(并破坏您的代码逻辑)。为避免这种情况,您必须了解内存栅栏和其他同步原语,了解它们如何影响您的代码。

关于C++ While(1) 循环不在其中调用 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com