parent
							
								
									5891613b22
								
							
						
					
					
						commit
						cb4f82b2a9
					
				| @ -0,0 +1,27 @@ | ||||
| use thread; | ||||
| use alloc::VecDeque; | ||||
| use super::SpinNoIrqLock; | ||||
| 
 | ||||
| pub struct Condvar { | ||||
|     wait_queue: SpinNoIrqLock<VecDeque<thread::Thread>>, | ||||
| } | ||||
| 
 | ||||
| impl Condvar { | ||||
|     pub fn new() -> Self { | ||||
|         Condvar { wait_queue: SpinNoIrqLock::new(VecDeque::new()) } | ||||
|     } | ||||
|     pub fn wait(&self) { | ||||
|         self.wait_queue.lock().push_back(thread::current()); | ||||
|         thread::park(); | ||||
|     } | ||||
|     pub fn notify_one(&self) { | ||||
|         if let Some(t) = self.wait_queue.lock().pop_front() { | ||||
|             t.unpark(); | ||||
|         } | ||||
|     } | ||||
|     pub fn notify_all(&self) { | ||||
|         while let Some(t) = self.wait_queue.lock().pop_front() { | ||||
|             t.unpark(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1,5 +1,7 @@ | ||||
| mod mutex; | ||||
| mod semaphore; | ||||
| mod condvar; | ||||
| //mod semaphore;
 | ||||
| pub mod test; | ||||
| 
 | ||||
| pub use self::mutex::*; | ||||
| pub use self::mutex::*; | ||||
| pub use self::condvar::*; | ||||
					Loading…
					
					
				
		Reference in new issue