是否有std :: once_flag的polyfill?

时间:2017-04-13 18:52:58

标签: c++ std

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

我在Code Review上看到了这个:https://codereview.stackexchange.com/questions/117468/stdonce-flag-and-stdcall-once-implementation但是我想知道是否有正式的polyfill。

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

1 个答案:

答案 0 :(得分:0)

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

(您的问题可能不是来自GCC版本,而是来自特定的端口/包/平台;但是,因为您没有告诉我们您的工具链的名称/版本,或者你的构建命令,或你遇到的实际问题,我将简单地假设这不是这种情况。)

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

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