What is there to fix? Of course yield only yields to equal priority threads (one hopes that higher priority threads have already pre-empted).

At Tuesday 2003/02/25 08:26, you wrote:

Russell Hind said:
> Is yield intended to always yield to another thread if one can run?
> Because  the code for yield is
>
> void thread::yield()
> {
> #if defined(BOOST_HAS_WINTHREADS)
>      Sleep(0);
> #elif defined(BOOST_HAS_PTHREADS)
> #   if defined(BOOST_HAS_SCHED_YIELD)
>      int res = 0;
>      res = sched_yield();
>      assert(res == 0);
> #   elif defined(BOOST_HAS_PTHREAD_YIELD)
>      int res = 0;
>      res = pthread_yield();
>      assert(res == 0);
> #   else
>      xtime xt;
>      xtime_get(&xt, TIME_UTC);
>      sleep(xt);
> #   endif
> #elif defined(BOOST_HAS_MPTASKS)
>      MPYield();
> #endif
> }
>
> Taken from the main CVS.
>
> Sleep(0) on Win32 will only yield to another thread of equal or higher
> priority, not to lower priority threads.
>
> In boost::detail::lightweight_mutex::scoped_lock, it is mentioned that
> Sleep(1) will get around.  Is the behaviour of Sleep(0) the intended use
>  of yield?
>
>          explicit scoped_lock(lightweight_mutex & m): m_(m)
>          {
>              while( InterlockedExchange(&m_.l_, 1) )
>              {
>                  // Note: changed to Sleep(1) from Sleep(0).
>                  // According to MSDN, Sleep(0) will never yield
>                  // to a lower-priority thread, whereas Sleep(1)
>                  // will. Performance seems not to be affected.
>
>                  Sleep(1);
>              }
>          }
>
> (I don't actually use yield yet, so currently have no preference for
> either, but just wondered what the intended use of yield was)

I'll look into this and fix it. Thanks.

--
William E. Kempf


_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Victor A. Wagner Jr. http://rudbek.com The five most dangerous words in the English language: "There oughta be a law"

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to