libstdc++: Fix __thread_yield for non-gthreads targets
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.
This commit is contained in:
parent
d27153f038
commit
cc9a0a3d79
@ -213,24 +213,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
{ _M_w._M_do_wait(_M_version); }
|
||||
};
|
||||
|
||||
inline void
|
||||
__thread_relax() noexcept
|
||||
{
|
||||
#if defined __i386__ || defined __x86_64__
|
||||
__builtin_ia32_pause();
|
||||
#elif defined _GLIBCXX_USE_SCHED_YIELD
|
||||
__gthread_yield();
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void
|
||||
__thread_yield() noexcept
|
||||
{
|
||||
#if defined _GLIBCXX_USE_SCHED_YIELD
|
||||
#if defined _GLIBCXX_HAS_GTHREADS && defined _GLIBCXX_USE_SCHED_YIELD
|
||||
__gthread_yield();
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void
|
||||
__thread_relax() noexcept
|
||||
{
|
||||
#if defined __i386__ || defined __x86_64__
|
||||
__builtin_ia32_pause();
|
||||
#else
|
||||
__gthread_yield();
|
||||
#endif
|
||||
}
|
||||
} // namespace __detail
|
||||
|
||||
template<typename _Pred>
|
||||
|
Loading…
x
Reference in New Issue
Block a user