g++ 优化级别如何影响多线程程序中的 printf()?

How the g++ optimization level affects the printf() in Multi-threaded programs?

提问人:ZengYiFei 提问时间:11/1/2023 更新时间:11/1/2023 访问量:20

问:

我在多线程 Web 服务器程序中遇到了 printf() 行为的困难。

当我设置优化级别 = “-O0”时,defaule 级别。Printf() 在新线程中总是不起作用(至少我在我的终端中看不到输出)。但在主线程中,它运行良好;

但是,如果我设置优化级别 = “-O1” 或 “-O2”。Printf() 在所有线程中都按我预期的方式工作,它们在线程切换时打印一些信息。

是否有一些潜在的秘密?

代码在这里:https://github.com/liwook/CPPServer/tree/main/code/server_v12。 您可以将 Makefile 的第 71 行更改为“CPPFLAGS += -fno-strict-aliasing”以查看差异。

另外,我尝试了一些方法,例如 set noblocking、fflush(stdout) 和 read() 替换 printf()。在我设置优化级别之前,这些方法不起作用。

多线程 优化 G++ Printf

评论

1赞 Adrian Mole 11/1/2023
如果没有一些示例代码来解决您的问题,很难说。然而,一般来说,更高的优化级别暴露潜在的未定义行为问题并不罕见:它似乎在你的情况下起作用的事实可能只是“运气”。-O0

答: 暂无答案