Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate rand; // 0.5.5
- use std::collections::HashMap;
- use std::sync::Arc;
- use std::thread;
- fn main() {
- //working_example();
- }
- /*
- fn non_move_closure() {
- let map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
- thread::spawn(|| println!("{:?}", map));
- }
- */
- /*
- fn trying_to_share_after_move() {
- let map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
- let shared_map = Arc::new(map);
- let mut handles = vec![];
- for _ in 0..5 {
- handles.push(thread::spawn(move || {
- println!("{:?}", shared_map);
- }));
- }
- }
- */
- /*
- fn trying_to_access_mutably() {
- let map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
- map.insert(3, "c");
- let shared_map = Arc::new(map);
- let mut handles = vec![];
- for _ in 0..5 {
- let map_clone = Arc::clone(&shared_map);
- handles.push(thread::spawn(move || {
- map_clone.insert(4, "d");
- }));
- }
- }
- */
- fn working_example() {
- use rand::Rng;
- use std::sync::Mutex;
- let mut map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
- map.insert(3, "c");
- let shared_map = Arc::new(Mutex::new(map));
- let mut handles = vec![];
- for _ in 0..5 {
- let map_clone = Arc::clone(&shared_map);
- handles.push(thread::spawn(move || {
- map_clone
- .lock()
- .unwrap()
- .insert(rand::thread_rng().gen(), "d");
- }));
- }
- for h in handles {
- h.join().unwrap();
- }
- let map = Arc::try_unwrap(shared_map).unwrap().into_inner().unwrap();
- println!("{:#?}", map);
- }
Add Comment
Please, Sign In to add comment