Crate slave_pool

Source
Expand description

Simple thread pool

§Usage

use slave_pool::ThreadPool;
const SECOND: core::time::Duration = core::time::Duration::from_secs(1);

static POOL: ThreadPool = ThreadPool::new();

POOL.set_threads(8); //Tell how many threads you want

let mut handles = Vec::new();
for idx in 0..8 {
    handles.push(POOL.spawn_handle(move || {
        std::thread::sleep(SECOND);
        idx
    }));
}

POOL.set_threads(0); //Tells to shut down threads

for (idx, handle) in handles.drain(..).enumerate() {
    assert_eq!(handle.wait().unwrap(), idx) //Even though we told  it to shutdown all threads, it is going to finish queued job first
}

let handle = POOL.spawn_handle(|| {});
assert!(handle.wait_timeout(SECOND).is_err()); // All are shutdown now

POOL.set_threads(1); //But let's add one more

assert!(handle.wait().is_ok());

let handle = POOL.spawn_handle(|| panic!("Oh no!")); // We can panic, if we want

assert!(handle.wait().is_err()); // In that case we'll get error, but thread will be ok

let handle = POOL.spawn_handle(|| {});

POOL.set_threads(0);

assert!(handle.wait().is_ok());

Structs§

JobHandle
Handle to the job, allowing to await for it to finish
ThreadPool
Thread pool that allows to change number of threads at runtime.

Enums§

JoinError
Describes possible reasons for join to fail