Boost logo

Boost :

Subject: Re: [boost] [thread] linux.hpp, BOOST_HAS_PTHREAD_YIELD, BOOST_HAS_SCHED_YIELD
From: John Maddock (boost.regex_at_[hidden])
Date: 2014-10-20 06:33:22


> Reposting this here since I got no response on "users" but this list seems more appropriate:

Apologies for not replying before.

> Using boost 1.55, Ubuntu 12.04, gcc 4.6
>
>
> I'm building boost on linux using the lsb sdk (4.1.8) . I was getting the failure (paraphrased):
>
> pthread_yield not declared
>
> in libs/thread/src/thread.cpp 513

Weird. Fairly obviously that's a well tested combination, and normally
both BOOST_HAS_PTHREAD_YIELD and BOOST_HAS_SCHED_YIELD will get defined.

The former is a GNU extension, and I really should figure out what
define triggers it's presence (_GNU_SOURCE probably, but I need to
check). The latter is set in posix_features.hpp via:

# if defined(_POSIX_PRIORITY_SCHEDULING) &&
(_POSIX_PRIORITY_SCHEDULING+0 > 0)\
             || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) &&
(_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\
             || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))
# define BOOST_HAS_SCHED_YIELD
# endif

So for whatever reason, your version of <unistd.h> is not signalling the
presence of this API. Indeed the linux man pages state:

"POSIX systems on which sched_yield() is available define
_POSIX_PRIORITY_SCHEDULING in <unistd.h>."

which is clearly not the case here.

I'll try and see what sched.h actually does on Linux.

John.

> The documentation for pthread_yield (http://man7.org/linux/man-pages/man3/pthread_yield.3.html) says:
>
> This call is nonstandard, but present on several other systems. Use the standardized sched_yield(2)<http://man7.org/linux/man-pages/man2/sched_yield.2.html> instead.
>
> If I change boost/config/platform/linux.hpp to define
>
> BOOST_HAS_SCHED_YIELD
>
> instead of
>
> BOOST_HAS_PTHREAD_YIELD
>
>
> Then sched_yield is used instead and the build finishes properly.
>
>
> I'm posting this for two reasons:
>
>
> 1. To help others running into the same issue
> 2. To question whether linux.hpp should be updated officially as I did above
> 3. If not, why
>
> Thanks,
>
> Rob Conde
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk