gpt4 book ai didi

c++ - 如何避免线程+优化器==无限循环?

转载 作者:太空狗 更新时间:2023-10-29 19:47:02 25 4
gpt4 key购买 nike

<分区>

code review 中今天,我偶然发现了以下代码(为了发布而稍作修改):

while (!initialized)
{
// The thread can start before the constructor has finished initializing the object.
// Can lead to strange behavior.
continue;
}

这是在新线程中运行的前几行代码。在另一个线程中,一旦初始化完成,它将 initialized 设置为 true

我知道优化器可能会将其变成无限循环,但避免这种情况的最佳方法是什么?

  • volatile - considered harmful
  • 调用 isInitialized() 函数而不是直接使用变量 - 这会保证内存屏障吗?如果函数声明为内联会怎样?

还有其他选择吗?

编辑:

应该早点提到这个,但这是需要在 Windows、Linux、Solaris 等上运行的可移植代码。我们主要使用 Boost.Thread用于我们的可移植线程库。

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