Choose task thread in rust_scheduler by round robin
Remove the random context from rust_scheduler and use a simple round robin system to choose which thread a new task gets put on. Also, some incorrect tab indents around scoped blocks were fixed.
This commit is contained in:
parent
0904f25507
commit
8aee42a382
@ -13,7 +13,6 @@ rust_scheduler::rust_scheduler(rust_kernel *kernel,
|
||||
num_threads(num_threads),
|
||||
id(id)
|
||||
{
|
||||
isaac_init(kernel, &rctx);
|
||||
create_task_threads();
|
||||
}
|
||||
|
||||
@ -86,9 +85,11 @@ rust_task *
|
||||
rust_scheduler::create_task(rust_task *spawner, const char *name) {
|
||||
size_t thread_no;
|
||||
{
|
||||
scoped_lock with(lock);
|
||||
thread_no = isaac_rand(&rctx) % num_threads;
|
||||
live_tasks++;
|
||||
scoped_lock with(lock);
|
||||
live_tasks++;
|
||||
if (++cur_thread >= num_threads)
|
||||
cur_thread = 0;
|
||||
thread_no = cur_thread;
|
||||
}
|
||||
rust_task_thread *thread = threads[thread_no];
|
||||
return thread->create_task(spawner, name);
|
||||
@ -98,11 +99,11 @@ void
|
||||
rust_scheduler::release_task() {
|
||||
bool need_exit = false;
|
||||
{
|
||||
scoped_lock with(lock);
|
||||
live_tasks--;
|
||||
if (live_tasks == 0) {
|
||||
need_exit = true;
|
||||
}
|
||||
scoped_lock with(lock);
|
||||
live_tasks--;
|
||||
if (live_tasks == 0) {
|
||||
need_exit = true;
|
||||
}
|
||||
}
|
||||
if (need_exit) {
|
||||
// There are no more tasks on this scheduler. Time to leave
|
||||
@ -129,10 +130,10 @@ void
|
||||
rust_scheduler::release_task_thread() {
|
||||
uintptr_t new_live_threads;
|
||||
{
|
||||
scoped_lock with(lock);
|
||||
new_live_threads = --live_threads;
|
||||
scoped_lock with(lock);
|
||||
new_live_threads = --live_threads;
|
||||
}
|
||||
if (new_live_threads == 0) {
|
||||
kernel->release_scheduler_id(id);
|
||||
kernel->release_scheduler_id(id);
|
||||
}
|
||||
}
|
||||
|
@ -10,16 +10,16 @@ public:
|
||||
rust_srv *srv;
|
||||
rust_env *env;
|
||||
private:
|
||||
// Protects the random number context and live_threads
|
||||
// Protects live_threads and cur_thread increments
|
||||
lock_and_signal lock;
|
||||
// When this hits zero we'll tell the kernel to release us
|
||||
uintptr_t live_threads;
|
||||
// When this hits zero we'll tell the threads to exit
|
||||
uintptr_t live_tasks;
|
||||
randctx rctx;
|
||||
|
||||
array_list<rust_task_thread *> threads;
|
||||
const size_t num_threads;
|
||||
size_t cur_thread;
|
||||
|
||||
rust_sched_id id;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user