Andrew Johnson 6 years ago
parent 30fd398ad6
commit ef1258fc29

@ -80,3 +80,11 @@ path = "share7.rs"
name = "pattern1"
path = "pattern1.rs"
[[bin]]
name = "pattern2"
path = "pattern2.rs"
[[bin]]
name = "pattern3"
path = "pattern3.rs"

@ -1,8 +1,9 @@
use std::thread;
use std::sync::mpsc::{channel};
use std::sync::mpsc::{channel,Sender,Receiver};
use std::time;
extern crate rand;
fn new_ping() {
fn new_ping() -> (Sender<u64>, Receiver<u64>) {
let (pinginsend,pinginrecv) = channel();
let (pingoutsend,pingoutrecv) = channel();
let mut ping = 1;
@ -19,7 +20,7 @@ fn new_ping() {
(pinginsend, pingoutrecv)
}
fn new_pong() {
fn new_pong() -> (Sender<u64>, Receiver<u64>) {
let (ponginsend,ponginrecv) = channel();
let (pongoutsend,pongoutrecv) = channel();
let mut pong = 2;
@ -37,13 +38,17 @@ fn new_pong() {
}
fn main() {
let mut d = 3;
let pings = vec![ping_new(), ping_new(), ping_new()];
let pongs = vec![pong_new(), pong_new(), pong_new()];
let pings = vec![new_ping(), new_ping(), new_ping()];
let pongs = vec![new_pong(), new_pong(), new_pong()];
loop {
pinginsend.send(d).unwrap();
d = pingoutrecv.recv().unwrap();
ponginsend.send(d).unwrap();
d = pongoutrecv.recv().unwrap();
let mut d = 3;
let (ref pingin,ref pingout) = pings[(rand::random::<u64>() % 3) as usize];
pingin.send(d).unwrap();
d = pingout.recv().unwrap();
let (ref pongin,ref pongout) = pongs[(rand::random::<u64>() % 3) as usize];
pongin.send(d).unwrap();
pongout.recv().unwrap();
}
}

@ -0,0 +1,54 @@
use std::thread;
use std::sync::mpsc::{channel,Sender,Receiver};
use std::time;
extern crate rand;
fn new_ping() -> (Sender<u64>, Receiver<u64>) {
let (pinginsend,pinginrecv) = channel();
let (pingoutsend,pingoutrecv) = channel();
let mut ping = 1;
thread::spawn(move || {
let t = time::Duration::from_millis(1000);
loop {
let n = pinginrecv.recv().unwrap();
ping += n;
println!("ping {}", ping);
thread::sleep(t);
pingoutsend.send(ping).unwrap();
}
});
(pinginsend, pingoutrecv)
}
fn new_pong() -> (Sender<u64>, Receiver<u64>) {
let (ponginsend,ponginrecv) = channel();
let (pongoutsend,pongoutrecv) = channel();
let mut pong = 2;
thread::spawn(move || {
let t = time::Duration::from_millis(1000);
loop {
let n = ponginrecv.recv().unwrap();
pong += n;
println!("pong {}", pong);
thread::sleep(t);
pongoutsend.send(pong).unwrap();
}
});
(ponginsend, pongoutrecv)
}
fn main() {
let pings = vec![new_ping(), new_ping(), new_ping()];
let pongs = vec![new_pong(), new_pong(), new_pong()];
loop {
let mut d = 3;
let (ref pingin,ref pingout) = pings[(rand::random::<u64>() % 3) as usize];
pingin.send(d).unwrap();
d = pingout.recv().unwrap();
let (ref pongin,ref pongout) = pongs[(rand::random::<u64>() % 3) as usize];
pongin.send(d).unwrap();
pongout.recv().unwrap();
}
}
Loading…
Cancel
Save