Improve wait condition performance

This commit is contained in:
Jeremy Soller 2016-10-20 21:49:47 -06:00
parent f24e441a7a
commit 38531e2ecc

View file

@ -1,6 +1,5 @@
use alloc::arc::Arc; use alloc::arc::Arc;
use collections::Vec; use collections::Vec;
use core::mem;
use spin::{Mutex, RwLock}; use spin::{Mutex, RwLock};
use context::{self, Context}; use context::{self, Context};
@ -13,17 +12,17 @@ pub struct WaitCondition {
impl WaitCondition { impl WaitCondition {
pub fn new() -> WaitCondition { pub fn new() -> WaitCondition {
WaitCondition { WaitCondition {
contexts: Mutex::new(Vec::new()) contexts: Mutex::new(Vec::with_capacity(16))
} }
} }
pub fn notify(&self) -> usize { pub fn notify(&self) -> usize {
let mut contexts = Vec::new(); let mut contexts = self.contexts.lock();
mem::swap(&mut *self.contexts.lock(), &mut contexts); let len = contexts.len();
for context_lock in contexts.iter() { while let Some(context_lock) = contexts.pop() {
context_lock.write().unblock(); context_lock.write().unblock();
} }
contexts.len() len
} }
pub fn wait(&self) { pub fn wait(&self) {