_lock<std::shared_timed_mutex> Lock(MainLock);    // Estimate the overall runtime cost using the scheduling policy   const unsigned TotalCost = estimateTotalCost(BC, SkipPredicate, SchedPolicy);   const unsigned BlocksCount = TasksPerThread * opts::ThreadCount;   const unsigned BlockCost =       TotalCost > BlocksCount ? TotalCost / BlocksCount : 0;    // Divide work into blocks of equal cost   ThreadPool &Pool = getThreadPool();   auto BlockBegin = BC.getBinaryFunctions().begin();   unsigned CurrentCost = 0;   