thread_id_t iteration_begin_impl() { stree_depth_ = 0; unsigned const index = rand_impl(this->running_threads_count, sched_type_sched); thread_id_t const th = this->running_threads[index]; return th; }
const int mrt::random(const unsigned max) { if (max < 2) return 0; // int bits; // unsigned m = max; // for(bits = 1; m >>= 1; ++bits); // bits = (32 - bits) / 2; //take middle bits of the generated number unsigned x = rand_impl(); /* unsigned len, n = max; for(len = 0; n != 0; n >>= 1, ++len); assert(len > 0 && len <= 32); len = (32 - len); //LOG_DEBUG(("random len: %u for maximum %u", len, max)); //LOG_DEBUG(("random number: 0x%08x, shifted: %u, max: %u", x, x >> len, max)); x >>= len; */ //x = (x >> bits) % max; x %= max; //LOG_DEBUG(("result: %u of %d, bits: %d", x, max, bits)); return (int)x; }