Guest User

Untitled

a guest
Nov 14th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. extern crate rand; // 0.5.5
  2.  
  3. use std::collections::HashMap;
  4. use std::sync::Arc;
  5. use std::thread;
  6.  
  7. fn main() {
  8. //working_example();
  9. }
  10.  
  11. /*
  12. fn non_move_closure() {
  13. let map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
  14. thread::spawn(|| println!("{:?}", map));
  15. }
  16. */
  17.  
  18. /*
  19. fn trying_to_share_after_move() {
  20. let map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
  21. let shared_map = Arc::new(map);
  22. let mut handles = vec![];
  23. for _ in 0..5 {
  24. handles.push(thread::spawn(move || {
  25. println!("{:?}", shared_map);
  26. }));
  27. }
  28. }
  29. */
  30.  
  31. /*
  32. fn trying_to_access_mutably() {
  33. let map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
  34. map.insert(3, "c");
  35.  
  36. let shared_map = Arc::new(map);
  37. let mut handles = vec![];
  38. for _ in 0..5 {
  39. let map_clone = Arc::clone(&shared_map);
  40. handles.push(thread::spawn(move || {
  41. map_clone.insert(4, "d");
  42. }));
  43. }
  44. }
  45. */
  46.  
  47. fn working_example() {
  48. use rand::Rng;
  49. use std::sync::Mutex;
  50.  
  51. let mut map: HashMap<_, _> = [(1, "a"), (2, "b")].into_iter().cloned().collect();
  52. map.insert(3, "c");
  53.  
  54. let shared_map = Arc::new(Mutex::new(map));
  55. let mut handles = vec![];
  56. for _ in 0..5 {
  57. let map_clone = Arc::clone(&shared_map);
  58. handles.push(thread::spawn(move || {
  59. map_clone
  60. .lock()
  61. .unwrap()
  62. .insert(rand::thread_rng().gen(), "d");
  63. }));
  64. }
  65. for h in handles {
  66. h.join().unwrap();
  67. }
  68. let map = Arc::try_unwrap(shared_map).unwrap().into_inner().unwrap();
  69. println!("{:#?}", map);
  70. }
Add Comment
Please, Sign In to add comment