t1.join().unwrap();
+ // message passing
let (tx1, rx) = sync::mpsc::channel();
let tx2 = tx1.clone();
sender1.join().unwrap();
sender2.join().unwrap();
+
+ // shared state
+ let counter = sync::Arc::new(sync::Mutex::new(0));
+ let mut threads = vec![];
+ for _ in 0..10 {
+ let tc = sync::Arc::clone(&counter);
+ threads.push(thread::spawn(move || {
+ *tc.lock().unwrap() += 1;
+ }));
+ }
+
+ for t in threads {
+ t.join().unwrap();
+ }
+
+ println!("counter: {}", *counter.lock().unwrap());
+}
+
+fn test_dyn_traits() {
+ let text = "I ate a salad for lunch today";
+ let mut post = Post::new();
+ post.add_text(text);
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!(text, post.content());
}
fn main() {
test_closures();
test_iterators();
test_threads();
+ test_dyn_traits();
}