The __gthread_yield() function is only defined for gthreads targets, so
check _GLIBCXX_HAS_GTHREADS before using it.
Also reorder __thread_relax and __thread_yield so that the former can
use the latter instead of repeating the same preprocessor checks.
libstdc++-v3/ChangeLog:
* include/bits/atomic_wait.h (__thread_yield()): Check
_GLIBCXX_HAS_GTHREADS before using __gthread_yield.
(__thread_relax()): Use __thread_yield() instead of repeating
the preprocessor checks for __gthread_yield.
};
inline void
- __thread_relax() noexcept
+ __thread_yield() noexcept
{
-#if defined __i386__ || defined __x86_64__
- __builtin_ia32_pause();
-#elif defined _GLIBCXX_USE_SCHED_YIELD
- __gthread_yield();
+#if defined _GLIBCXX_HAS_GTHREADS && defined _GLIBCXX_USE_SCHED_YIELD
+ __gthread_yield();
#endif
}
inline void
- __thread_yield() noexcept
+ __thread_relax() noexcept
{
-#if defined _GLIBCXX_USE_SCHED_YIELD
- __gthread_yield();
+#if defined __i386__ || defined __x86_64__
+ __builtin_ia32_pause();
+#else
+ __gthread_yield();
#endif
}
-
} // namespace __detail
template<typename _Pred>