annotate src/t16thread/src/mpsc_test.rs @ 7:8768d36c3b69

thread test
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 12 Jan 2021 14:34:05 +0900
parents 6e7204a1ba99
children 2c6285996268
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 pub mod mpsc_test {
7
8768d36c3b69 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
3 use std::sync::mpsc;
8768d36c3b69 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
4 use std::thread;
8768d36c3b69 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
5 use std::time::Duration;
6
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 pub fn main_mpsc() {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 let (tx, rx) = mpsc::channel();
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 thread::spawn(move || {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 let vals = vec![
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 String::from("hi"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 String::from("from"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 String::from("the"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 String::from("thread"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 ];
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 for val in vals {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 tx.send(val).unwrap();
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 thread::sleep(Duration::from_secs(1));
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 }
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 });
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 for received in rx {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 println!("Got: {}", received);
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 }
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 }
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 pub fn mainc() {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 let (tx, rx) = mpsc::channel();
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 let tx1 = mpsc::Sender::clone(&tx);
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 thread::spawn(move || {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 let vals = vec![
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 String::from("hi"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 String::from("from"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 String::from("the"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 String::from("thread"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 ];
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 for val in vals {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 tx1.send(val).unwrap();
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 thread::sleep(Duration::from_secs(1));
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 }
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 });
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 thread::spawn(move || {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 let vals = vec![
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 String::from("more"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 String::from("messages"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 String::from("for"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 String::from("you"),
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 ];
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 for val in vals {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 tx.send(val).unwrap();
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 thread::sleep(Duration::from_secs(1));
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 }
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 });
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 for received in rx {
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 println!("Got: {}", received);
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
6e7204a1ba99 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 }
7
8768d36c3b69 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
64 }
8768d36c3b69 thread test
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
65