5 releases (3 breaking)
0.4.0 | Jan 11, 2020 |
---|---|
0.3.0 | Jan 10, 2020 |
0.2.0 | Jan 8, 2020 |
0.1.2 | Jan 7, 2020 |
0.1.1 | Jan 7, 2020 |
#665 in Concurrency
28 downloads per month
59KB
1.5K
SLoC
greenie
Simple green threads in Rust programming language.
Features
- Generators in stable Rust!
- Synchronization primitives:
Mutex
,Condvar
others will be implemented later ( see TODO ). - Fast.
- Semi-automatic scheduling using
greenify
macro that inserts yield points in your functions.
TODO
- Preemptive scheduling
- Implement FIFO schedulign algorithm
- Implement
RwLock
. - Futures
Example
Condvar and Mutex example:
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.push("ping");
println!("{}", chan_2.pop().unwrap());
chan_1.push("ping");
println!("{}", chan_2.pop().unwrap());
chan_1.push("ping");
println!("{}", chan_2.pop().unwrap());
},
(chan_1.clone(), chan_2.clone()),
);
let fpong = Fiber::new_capture(
|chan_1, chan_2| {
chan_2.push("pong");
println!("{}", chan_1.pop().unwrap());
chan_2.push("pong");
println!("{}", chan_1.pop().unwrap());
chan_2.push("pong");
println!("{}", chan_1.pop().unwrap());
},
(chan_1.clone(), chan_2.clone()),
);
fpong.start().unwrap();
fping.start().unwrap();
}
For more examples read documentation or examples/
Dependencies
~4MB
~77K SLoC