diff --git a/include/boost/fiber/condition.hpp b/include/boost/fiber/condition.hpp index 0b0f319c..99460d27 100644 --- a/include/boost/fiber/condition.hpp +++ b/include/boost/fiber/condition.hpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include @@ -104,8 +103,7 @@ public: lt.unlock(); while ( ! n->is_ready() ) // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } catch (...) @@ -178,8 +176,7 @@ public: break; } // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } } diff --git a/include/boost/fiber/operations.hpp b/include/boost/fiber/operations.hpp index 031e50e6..2379f72c 100644 --- a/include/boost/fiber/operations.hpp +++ b/include/boost/fiber/operations.hpp @@ -7,7 +7,6 @@ #define BOOST_THIS_FIBER_OPERATIONS_H #include -#include #include #include @@ -35,12 +34,9 @@ inline void yield() { if ( fibers::detail::scheduler::instance()->active() ) - { fibers::detail::scheduler::instance()->yield(); } + fibers::detail::scheduler::instance()->yield(); else - { - if ( ! fibers::detail::scheduler::instance()->run() ) - this_thread::yield(); - } + fibers::detail::scheduler::instance()->run(); } inline @@ -58,8 +54,7 @@ void sleep_until( fibers::clock_type::time_point const& sleep_time) else { while ( fibers::clock_type::now() <= sleep_time) - if ( ! fibers::detail::scheduler::instance()->run() ) - this_thread::yield(); + fibers::detail::scheduler::instance()->run(); } } diff --git a/src/mutex.cpp b/src/mutex.cpp index b5d70d63..8d3a4801 100644 --- a/src/mutex.cpp +++ b/src/mutex.cpp @@ -9,7 +9,6 @@ #include #include -#include #include "boost/fiber/detail/scheduler.hpp" #include "boost/fiber/interruption.hpp" @@ -85,8 +84,7 @@ mutex::lock() // wait until main-fiber gets notified while ( ! n->is_ready() ) // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } } diff --git a/src/recursive_mutex.cpp b/src/recursive_mutex.cpp index 6c032d18..eab8dbdd 100644 --- a/src/recursive_mutex.cpp +++ b/src/recursive_mutex.cpp @@ -9,7 +9,6 @@ #include #include -#include #include "boost/fiber/detail/scheduler.hpp" #include "boost/fiber/interruption.hpp" @@ -99,8 +98,7 @@ recursive_mutex::lock() // wait until main-fiber gets notified while ( ! n->is_ready() ) // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } } diff --git a/src/recursive_timed_mutex.cpp b/src/recursive_timed_mutex.cpp index 0b107883..00d17dc5 100644 --- a/src/recursive_timed_mutex.cpp +++ b/src/recursive_timed_mutex.cpp @@ -9,7 +9,6 @@ #include #include -#include #include "boost/fiber/detail/scheduler.hpp" #include "boost/fiber/interruption.hpp" @@ -99,8 +98,7 @@ recursive_timed_mutex::lock() // wait until main-fiber gets notified while ( ! n->is_ready() ) // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } } @@ -218,8 +216,7 @@ recursive_timed_mutex::try_lock_until( clock_type::time_point const& timeout_tim return false; } // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } } diff --git a/src/round_robin.cpp b/src/round_robin.cpp index d958443b..bf546d97 100644 --- a/src/round_robin.cpp +++ b/src/round_robin.cpp @@ -96,7 +96,11 @@ round_robin::run() detail::fiber_base::ptr_t f; do { - if ( rqueue_.empty() ) return false; + if ( rqueue_.empty() ) + { + this_thread::yield(); + return false; + } f.swap( rqueue_.front() ); rqueue_.pop_front(); if ( f->is_ready() ) break; diff --git a/src/round_robin_ws.cpp b/src/round_robin_ws.cpp index 0ec48315..0a13133c 100644 --- a/src/round_robin_ws.cpp +++ b/src/round_robin_ws.cpp @@ -96,7 +96,11 @@ round_robin_ws::run() detail::fiber_base::ptr_t f; do { - if ( ! rqueue_.try_pop( f) ) return false; + if ( ! rqueue_.try_pop( f) ) + { + this_thread::yield(); + return false; + } if ( f->is_ready() ) break; else BOOST_ASSERT_MSG( false, "fiber with invalid state in ready-queue"); } diff --git a/src/timed_mutex.cpp b/src/timed_mutex.cpp index 57b9e556..a5ae9567 100644 --- a/src/timed_mutex.cpp +++ b/src/timed_mutex.cpp @@ -9,7 +9,6 @@ #include #include -#include #include "boost/fiber/detail/scheduler.hpp" #include "boost/fiber/interruption.hpp" @@ -85,8 +84,7 @@ timed_mutex::lock() // wait until main-fiber gets notified while ( ! n->is_ready() ) // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } } @@ -186,8 +184,7 @@ timed_mutex::try_lock_until( clock_type::time_point const& timeout_time) return false; } // run scheduler - if ( ! detail::scheduler::instance()->run() ) - this_thread::yield(); + detail::scheduler::instance()->run(); } } }