From 5302cde188bba80dd38c58eaafa792d621b0818c Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Mon, 25 Jul 2011 18:00:37 -0700 Subject: Made task threads wait instead of sleep, so they can be woken up. This appears to give us much better parallel performance. Also, commented out one more unsafe log and updated rust_kernel.cpp to compile under g++ --- src/rt/rust_kernel.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/rt/rust_kernel.cpp') diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index 1eb82602798..9cdf07cd759 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -53,13 +53,13 @@ rust_kernel::destroy_scheduler(rust_scheduler *sched) { } void rust_kernel::create_schedulers() { - for(int i = 0; i < num_threads; ++i) { + for(size_t i = 0; i < num_threads; ++i) { threads.push(create_scheduler(i)); } } void rust_kernel::destroy_schedulers() { - for(int i = 0; i < num_threads; ++i) { + for(size_t i = 0; i < num_threads; ++i) { destroy_scheduler(threads[i]); } } @@ -106,7 +106,7 @@ rust_kernel::get_port_handle(rust_port *port) { void rust_kernel::log_all_scheduler_state() { - for(int i = 0; i < num_threads; ++i) { + for(size_t i = 0; i < num_threads; ++i) { threads[i]->log_state(); } } @@ -252,12 +252,12 @@ rust_kernel::signal_kernel_lock() { int rust_kernel::start_task_threads() { - for(int i = 0; i < num_threads; ++i) { + for(size_t i = 0; i < num_threads; ++i) { rust_scheduler *thread = threads[i]; thread->start(); } - for(int i = 0; i < num_threads; ++i) { + for(size_t i = 0; i < num_threads; ++i) { rust_scheduler *thread = threads[i]; thread->join(); } @@ -271,6 +271,12 @@ rust_kernel::create_task(rust_task *spawner, const char *name) { return threads[rand(&rctx) % num_threads]->create_task(spawner, name); } +void rust_kernel::wakeup_schedulers() { + for(size_t i = 0; i < num_threads; ++i) { + threads[i]->lock.signal_all(); + } +} + #ifdef __WIN32__ void rust_kernel::win32_require(LPCTSTR fn, BOOL ok) { -- cgit 1.4.1-3-g733a5