-// cutoff_at_splitpoint() checks whether a beta cutoff has occurred in
-// the thread's currently active split point, or in some ancestor of
-// the current split point.
-
-bool ThreadsManager::cutoff_at_splitpoint(int threadID) const {
-
- assert(threadID >= 0 && threadID < activeThreads);
-
- SplitPoint* sp = threads[threadID].splitPoint;
-
- for ( ; sp && !sp->betaCutoff; sp = sp->parent) {}
- return sp != NULL;
-}
-
-
-// thread_is_available() checks whether the thread with threadID "slave" is
-// available to help the thread with threadID "master" at a split point. An
-// obvious requirement is that "slave" must be idle. With more than two
-// threads, this is not by itself sufficient: If "slave" is the master of
-// some active split point, it is only available as a slave to the other
-// threads which are busy searching the split point at the top of "slave"'s
-// split point stack (the "helpful master concept" in YBWC terminology).
-
-bool ThreadsManager::thread_is_available(int slave, int master) const {
-
- assert(slave >= 0 && slave < activeThreads);
- assert(master >= 0 && master < activeThreads);
- assert(activeThreads > 1);
-
- if (threads[slave].state != THREAD_AVAILABLE || slave == master)
- return false;
-
- // Make a local copy to be sure doesn't change under our feet
- int localActiveSplitPoints = threads[slave].activeSplitPoints;
-
- // No active split points means that the thread is available as
- // a slave for any other thread.
- if (localActiveSplitPoints == 0 || activeThreads == 2)
- return true;
-
- // Apply the "helpful master" concept if possible. Use localActiveSplitPoints
- // that is known to be > 0, instead of threads[slave].activeSplitPoints that
- // could have been set to 0 by another thread leading to an out of bound access.
- if (threads[slave].splitPoints[localActiveSplitPoints - 1].slaves[master])
- return true;
-
- return false;
-}
-
-
-// available_thread_exists() tries to find an idle thread which is available as