1extern crate cluExtIO;
2
3use std::io::stdout;
4use cluExtIO::UnionWriteConst;
5use cluExtIO::ExtWrite;
6use cluExtIO::MutexWrite;
7use cluExtIO::FlushLockWrite;
8use cluExtIO::ImMutWrite;
9
10use std::io::Write;
11use std::fs::File;
12use std::sync::Arc;
13use std::sync::Barrier;
14use std::thread;
15
16pub fn main() {
17 let arc_out = Arc::new({
18 let out = stdout();
19
20 let file = FlushLockWrite::new(MutexWrite::new(File::create("/tmp/file.out").unwrap()));
21 let file2 = FlushLockWrite::new(MutexWrite::new(File::create("/tmp/file2.out").unwrap()));
25 out.union(file).union(file2)
29 }); let barrier = Arc::new(Barrier::new(5 + 1));
33
34 for num_thread in 0..5 {
35 let barrier = barrier.clone();
36 let arc_out = arc_out.clone();
37 thread::spawn(move || {
38
39 arc_out.lock_fn(|mut lock| {
40 lock.write_fmt(format_args!("#@{} {}\n", num_thread, "Thread #OK")).unwrap();
41 lock.write_fmt(format_args!("#@{} {}\n", num_thread, "Thread #T")).unwrap();
42 });
43
44 barrier.wait();
45 });
46 }
47
48 barrier.wait();
49
50 arc_out.write_fmt(format_args!("#@{} {}\n", 999, "Thread pull end.")).unwrap();
51 }