use super::{Promise,Promisee};
use std::thread::{Thread};
pub struct Fence;
impl Fence {
pub fn new(n:u16) {
let (it,ir) = Promise::new(); let (ft,fr) = Promise::new();
Thread::spawn (move || {
Fence::await(&ir); ft.wakeup(); });
for n in (0..(n-1)) {
let _fr = fr.clone();
Thread::spawn (move || {
Fence::await(&_fr); });
}
Thread::spawn (move || {
it.wakeup(); Fence::await(&fr);
});
}
pub fn await(p:&Promisee<()>) {
p.with(|_| {()} );
}
}
#[cfg(test)]
mod tests {
extern crate test;
use Fence;
use std::thread::Thread;
#[test]
fn test_fence() {
Fence::new(5);
assert!(true); }
}