# BlockingObjectPool A thread safe, blocking, object pool in rust. ### Summary * `BlockingObjectPool::with_capacity` or `BlockingObjectPool::with_objects` to initialize a pool * `pool.get` to obtain a object from the pool If the pool is empty, `get` will be blocked. If the object is out of scope, it's been put back to the pool automatically. That's all! ### Examples ```rust extern crate blocking_object_pool; use blocking_object_pool::BlockingObjectPool; #[derive(Clone)] struct Hello { a: i32, b: i32, } fn main() { let pool = BlockingObjectPool::with_capacity(2, || Hello { a: 1, b: 2 }); // get one object let m = pool.get(); assert_eq!(m.a, 1); println!("one. m.a={}", m.a); // get another object. { let mut m = pool.get(); println!("two. m.a={}", m.a); m.a = 11; } // here the 2nd object goes out of scope, and it's been put back to the pool automatically. // you can either call drop(m) manually. let m = pool.get(); assert_eq!(m.a, 11); println!("two again, m.a={}", m.a); println!("this line will be blocked for ever"); let _m = pool.get(); } ``` Inspired by zslayton's [lifeguard](https://github.com/zslayton/lifeguard).