'yield'不是'std :: this_thread'的成员

时间:2012-02-04 10:04:54

标签: c++ multithreading gcc c++11

我试图产生当前线程:

  

的std :: this_thread ::收率();

但不幸的是GCC知道的更好:

  

'yield'不是'std :: this_thread'

的成员

我是否忘记了类似于D_GLIBCXX_USE_NANOSLEEP的黑客攻击,或者是什么?

3 个答案:

答案 0 :(得分:13)

是的,这似乎是与_GLIBCXX_USE_NANOSLEEP类似的问题。 GCC根据宏yield有条件地编译_GLIBCXX_USE_SCHED_YIELD。如果你定义它,它应该编译。

这将从GCC 4.8开始修复。

答案 1 :(得分:7)

您不应在代码中定义_GLIBCXX_USE_NANOSLEEP_GLIBCXX_USE_SCHED_YIELD。它们是GCC / libstdc ++ - 内部宏,所以应该定义它。如果没有定义它们,那是因为GCC没有配置检查功能可用性的选项。因为对于你正在使用的任何系统来说,启用该选项显然没有任何缺点,你可以问任何提供你的GCC的人这样做。在此之前,比在代码中启用宏更安全的方法是修改系统上的c++config.h文件以定义宏。

答案 2 :(得分:1)

配置gcc以启用sched_yield检测时,可能需要使用'--enable-libstdcxx-time'。出于某种原因,只需检查多个功能