[][src]Crate greenie

Lightweigh green threads & coroutines in stable Rust.

Getting started

Add greenie to your Cargo.toml:

[dependencies]
greenie = "*"

Create greenie main function in src/main.rs:

This example is not tested
use greenie::*;

#[greenie_main]
fn main() {
     
}
// Or you can invoke `create_main`:
fn main() {
    create_main(|| {
    });
}

Example

Ping-pong program

This example is not tested
use greenie::channel::*;

use greenie::{greeny_main, Fiber};
#[greeny_main]
fn main() {
    let chan_1 = Channel::<&'static str>::new(2);
    let chan_2 = Channel::<&'static str>::new(2);
    let fping = Fiber::new_capture(
        |chan_1, chan_2| {
            chan_1.send("ping");
            println!("{}", chan_2.recv().unwrap());
            chan_1.send("ping");
            println!("{}", chan_2.recv().unwrap());
            chan_1.send("ping");
            println!("{}", chan_2.recv().unwrap());
        },
        (chan_1.clone(), chan_2.clone()),
    );
    let fpong = Fiber::new_capture(
        |chan_1, chan_2| {
            chan_2.send("pong");
            println!("{}", chan_1.recv().unwrap());
            chan_2.send("pong");
            println!("{}", chan_1.recv().unwrap());
            chan_2.send("pong");
            println!("{}", chan_1.recv().unwrap());
        },
        (chan_1.clone(), chan_2.clone()),
    );

    fpong.start().unwrap();
    fping.start().unwrap();
}

Re-exports

pub use generator::generator_yield;
pub use scheduler::spawn_greenie;
pub use scheduler::yield_thread;
pub use fiber::Fiber;
pub use generator::*;

Modules

algorithm
common
ctx
fiber
generator
ptr

Just type that wraps *mut T for easy access to T contents (unsafe!)

scheduler

Macros

iterate_generator

Functions

create_main

Specify entry point for program that will use greenie.

thread_sleep

Puts the current thread to sleep for at least the specified amount of time.

Attribute Macros

greenify

Inserts thread_yield in function so programmer don't need to insert it by hand

greeny_main