Boost logo

Boost :

Subject: Re: [boost] [thread] linux.hpp, BOOST_HAS_PTHREAD_YIELD, BOOST_HAS_SCHED_YIELD
From: Rob Conde (rob.conde_at_[hidden])
Date: 2014-10-22 11:21:12


Ok - the lsb 4.1 version of unistd.h does not define _POSIX_PRIORITY_SCHEDULING, even though sched_yield is part of the 4.1 specification and, as you pointed out, the linux man pages say that it should. I'll file a bug with lsb. Thanks, Rob Conde ________________________________________ From: Boost <boost-bounces_at_[hidden]> on behalf of John Maddock <boost.regex_at_[hidden]> Sent: Monday, October 20, 2014 6:33 AM To: boost_at_[hidden] Subject: Re: [boost] [thread] linux.hpp, BOOST_HAS_PTHREAD_YIELD, BOOST_HAS_SCHED_YIELD > 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 > _______________________________________________ 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