C++ std::this_thread::yield与linux上的sched_yield有什么不同吗?

C++ std::this_thread::yield与linux上的sched_yield有什么不同吗?,c++,linux,C++,Linux,我只是想知道std::this_thread::yield是如何在linux上实现的,它与sched_yield有什么不同吗?我已经看到一些spinlock实现暗示std::this_thread::yield在线程放弃进程的时间方面比sched_yield更轻量级,这是真的吗?std::this_thread::yield的实现如下所示: /// yield inline void yield() noexcept { #ifdef _GLIBCXX_USE_S

我只是想知道std::this_thread::yield是如何在linux上实现的,它与sched_yield有什么不同吗?我已经看到一些spinlock实现暗示std::this_thread::yield在线程放弃进程的时间方面比sched_yield更轻量级,这是真的吗?

std::this_thread::yield的实现如下所示:

    /// yield
    inline void
    yield() noexcept
    {
#ifdef _GLIBCXX_USE_SCHED_YIELD
      __gthread_yield();
#endif
    }
符号_gthread_yield的定义如下:

# define __gthrw2(name,name2,type) \
  static __typeof(type) name \
    __attribute__ ((__weakref__(#name2), __copy__ (type))); \
  __gthrw_pragma(weak type)
# define __gthrw_(name) __gthrw_ ## name
...    
/* Typically, __gthrw_foo is a weak reference to symbol foo.  */
#define __gthrw(name) __gthrw2(__gthrw_ ## name,name,name)
...
__gthrw(sched_yield)
...
static inline int
__gthread_yield (void)
{
  return __gthrw_(sched_yield) ();
}

因此,基本上在gcc中,如果定义了_GLIBCXX_USE_sched_yield,那么调用std::this_thread::yield调用sched_yield。您可以发现,include中是否定义了_GLIBCXX_USE_SCHED_YIELD,但在linux x86或x86_64上很可能定义了它。因此,STD::THEXTHORIT::收益率应该只调用GDCGNU编译器集合和LIbSTDC++ + GNU C++库的实现上的SHDEDURE。p> 在LBC++C++标准库中,STD::THYS:线程:屈服函数定义可以找到:

符号uuu libcpp_thread_yield的定义如下:

一个编译器,使用LBC++C++标准库也调用STD:StdEff:Test:Tyr::屈服。 我只是想知道std::this_thread::yield是如何在linux上实现的,它与sched_yield有什么不同吗

在大多数linux实现中,这很可能是相同的

这是真的吗

在大多数linux实现中,这很可能是错误的。

中std::this\u thread::yield的实现如下所示:

    /// yield
    inline void
    yield() noexcept
    {
#ifdef _GLIBCXX_USE_SCHED_YIELD
      __gthread_yield();
#endif
    }
符号_gthread_yield的定义如下:

# define __gthrw2(name,name2,type) \
  static __typeof(type) name \
    __attribute__ ((__weakref__(#name2), __copy__ (type))); \
  __gthrw_pragma(weak type)
# define __gthrw_(name) __gthrw_ ## name
...    
/* Typically, __gthrw_foo is a weak reference to symbol foo.  */
#define __gthrw(name) __gthrw2(__gthrw_ ## name,name,name)
...
__gthrw(sched_yield)
...
static inline int
__gthread_yield (void)
{
  return __gthrw_(sched_yield) ();
}

因此,基本上在gcc中,如果定义了_GLIBCXX_USE_sched_yield,那么调用std::this_thread::yield调用sched_yield。您可以发现,include中是否定义了_GLIBCXX_USE_SCHED_YIELD,但在linux x86或x86_64上很可能定义了它。因此,STD::THEXTHORIT::收益率应该只调用GDCGNU编译器集合和LIbSTDC++ + GNU C++库的实现上的SHDEDURE。p> 在LBC++C++标准库中,STD::THYS:线程:屈服函数定义可以找到:

符号uuu libcpp_thread_yield的定义如下:

一个编译器,使用LBC++C++标准库也调用STD:StdEff:Test:Tyr::屈服。 我只是想知道std::this_thread::yield是如何在linux上实现的,它与sched_yield有什么不同吗

在大多数linux实现中,这很可能是相同的

这是真的吗


在大多数linux实现中,这很可能是错误的。

那么std::this\u thread::yield应该只调用thread\u yield-你的意思是说std::this\u thread::yield应该只调用sched\u yield吗?那么std::this_thread::yield应该只调用thread_yield-你是说std::this_thread::yield应该只调用sched_yield吗?