标准::once_flag是否有填充物?

Is there a polyfill for std::once_flag?

本文关键字:填充 flag once 标准 是否      更新时间:2023-10-16

在C++程序中,我使用的是使用std::once_flag的库,但似乎编译器(arm-none-eabi-g++)不支持这一点。这个std::once_flag有填充物吗?

我在代码审查上看到了这个:https://codereview.stackexchange.com/questions/117468/stdonce-flag-and-stdcall-once-implementation 但我想知道是否有官方的填充物。

polyfill 是否支持多线程并不重要,因为我的目标设备无论如何都不支持它。

没有"官方"填充物这样的东西。该标准是该语言的官方定义,由编译器来实现。如果您不能使用 GCC 4.8(第一个实现"完整"C++11 的 GCC),那么您将不得不尽可能地使用您自己或他人编写的代码来复制其行为。

(您的问题可能不是源于GCC版本,而是源于特定的端口/软件包/平台;但是,由于您没有告诉我们工具链的名称/版本,构建命令或您遇到的实际问题,我只是假设这里不是这种情况。

所以,你找到的代码就是你得到的。但是,您应该记住,您的程序将具有未定义的行为。理想情况下,您将升级编译器或切换回与 C++03 兼容的编码。就个人而言,我建议在完全使用C++11之前回退到Boost.Thread

或者,你知道,干脆不要使用std::once_flag,一个用于std::call_once的辅助结构,这都是关于多线程的......你声称你的设备不支持。