Crate scope_threadpool [] [src]

Yet another implementation of a scoped threadpool.

This one is has the additional ability to store a mutable state in each thread, which permits you to, for example, reuse expensive to setup database connections, one per thread. Also, you can set a backlog which can prevent an explosion of memory usage if you have many jobs to start.

A scoped threadpool allows many tasks to be executed in the current function scope, which means that data doesn't need to have a 'static lifetime.

Example

extern crate scope_threadpool;

fn main()
{
    // Create a threadpool holding 4 threads.
    // each thread creates its state from the given function
    let mut pool = scope_threadpool::Pool::new(
        4,
        || "costly setup function".len()
    );

    // each thread gets its own mutable copy of the result of
    // the above setup function

    let mut vec = vec![0, 0, 0, 0, 0, 0, 0, 0];

    // Each thread can access the variables from
    // the current scope
    pool.scoped(
        |scoped|
        {
            // Create references to each element in the vector ...
            for e in &mut vec
            {
                scoped.execute(
                    move |state|
                    {
                        *e += *state;
                    }
                );
            }
        }
    );

    assert_eq!(vec, vec![21, 21, 21, 21, 21, 21, 21, 21]);
}

Structs

Pool

Holds a number of threads that you can run tasks on

Scope

Represents the current scope, you can execute functions in it.