| extern crate crossbeam; | |
| extern crate fringe; | |
| use fringe::generator::*; | |
| use fringe::OsStack; | |
| use std::ptr; | |
| use std::thread; | |
| fn do_stuff(x: &mut i32) { | |
| loop { | |
| unsafe { | |
| ptr::write_volatile(x, 1); | |
| } | |
| } | |
| } | |
| fn gen(yielder: &mut Yielder<(), ()>, input: ()) { | |
| let mut var = 0; | |
| crossbeam::scope(|scope| { | |
| scope.spawn(|| do_stuff(&mut var)); | |
| thread::sleep_ms(100); | |
| yielder.suspend(()); | |
| }); | |
| } | |
| fn main() { | |
| let stack = OsStack::new(1<<16).unwrap(); | |
| let mut g = Generator::new(stack, gen); | |
| g.resume(()); | |
| drop(g); | |
| thread::sleep_ms(1000); | |
| // Drop g here while another thread is still accessing var | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment