Guest User

Untitled

a guest
Sep 24th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. use std::sync::{Mutex, Arc, RwLock};
  2. use std::thread;
  3. use std::collections::*;
  4.  
  5. #[derive(Debug)]
  6. struct MyObject {
  7. field: i32,
  8. }
  9. fn main() {
  10. let mut map = Arc::new(RwLock::new(HashMap::new()));
  11. let first = MyObject { field: 0 };
  12. let second = MyObject { field: 1 };
  13. {
  14. map.write().unwrap().insert(&0, first);
  15. }
  16. {
  17. map.write().unwrap().insert(&1, second);
  18. }
  19.  
  20. let mut handles = vec![];
  21.  
  22. for x in 0..=1 {
  23. let clone = Arc::clone(&map);
  24. let handle = thread::spawn(move || {
  25. let mut out = clone.write().unwrap();
  26. let out = out.get_mut(&x).unwrap();
  27.  
  28. out.field += 100;
  29. println!("XXResult: {:?}", out);
  30.  
  31. });
  32. handles.push(handle);
  33. }
  34.  
  35.  
  36. for handle in handles {
  37. handle.join();
  38. }
  39.  
  40.  
  41. }
Add Comment
Please, Sign In to add comment