gpt4 book ai didi

c++ - 在 Release模式下不能正确执行相同的操作

转载 作者:行者123 更新时间:2023-11-28 01:55:07 25 4
gpt4 key购买 nike

我正在使用 VS2015。

在 Debug模式下突出显示 while 循环正常工作 - 当 !P_Object->first_request 为真时它会中断。
但相同的条件在 Release模式下不起作用。此外,在 quickwatch 中,您可以看到 visual studio quickwatch 将 !P_Object->first_request 识别为 false,但循环继续重复。

顺便说一句:P_Object->first_request 变量在类中初始化为 false,并在 thread 中更改为 true(也许此信息有帮助 - idk)。

enter image description here

如何修复这个错误?

DEBUG Command line - "/GS /analyze- /W3 /Zc:wchar_t /I"C:\boost_1_62_0" /ZI /Gm /Od /Fd"Debug\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "WIN32_LEAN_AND_MEAN_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MTd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\ExpenditureAndReceipts.pch"";

RELEASE Command line - "/GS /analyze- /W3 /Gy /Zc:wchar_t /I"C:\boost_1_62_0" /Zi /Gm- /O2 /Fd"Release\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "WIN32_LEAN_AND_MEANNDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MT /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\ExpenditureAndReceipts.pch"";

最佳答案

您不能在一个线程中读取 bool 值并在另一个线程中写入它。编译器在第一个线程中随意缓存读取,从不读取内存变化。

如果您正在编写多线程编程,请通过原子和互斥等进行通信。

替换first_requeststd::atomic<bool> .这可能需要更改其他代码。完成后,一切都应该很好。

你所做的(在一个线程中读取,在另一个线程中写入,没有同步)是未定义的行为。未定义的行为并不总是会崩溃,它有时只会导致发布版本没有意义。

关于c++ - 在 Release模式下不能正确执行相同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41497116/

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