Skip to content

KaiserKarel/context-thread

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tests Actions Status Cargo Documentation

Context-thread

Threads that run within a context.

Most of the time, threads that outlive the parent thread are considered a code smell. ctx-thread ensures that all threads are joined before returning from the scope. Child threads have access to the Context object, which they can use to poll the status of the thread group. If one of the threads panics, the context is cancelled.

Scope

This library is based on the crossbeam's scoped threads:

use ctx_thread::scope;

let people = vec![
    "Alice".to_string(),
    "Bob".to_string(),
    "Carol".to_string(),
];

scope(|ctx| {
    for person in &people {
        ctx.spawn(move |_| {
            println!("Hello, {}", person);
        });
    }
}).unwrap();

Context

Aside from referring to the outer scope, threads may check the extra methods and return if necessary:

use ctx_thread::scope;


scope(|ctx| {
    ctx.spawn(|ctx| {
        while ctx.active() {
            // do work
        }
    });

    ctx.spawn(|ctx| {
        ctx.cancel();
    });
}).unwrap();

Note that these context based cancellations are a form of cooperative scheduling. Threads can still block even if a context expires.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages