Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. use std::thread;
  2. use std::time::Duration;
  3.  
  4. use std::sync::Arc;
  5. use crossbeam_arccell::ArcCell;
  6.  
  7. #[derive(Debug, Default)]
  8. struct Mine {
  9. val: i32,
  10. }
  11.  
  12. fn test_atomic_ptr() {
  13.  
  14.  
  15. let smalldur = Arc::new(Duration::from_millis(231));
  16. let twosec = Arc::new(Duration::from_secs(2));
  17.  
  18.  
  19. let some_ptr = Arc::new(ArcCell::new(Mine::default()));
  20.  
  21.  
  22. let prod_dur = Arc::clone(&smalldur);
  23.  
  24. let prod_ptr = Arc::clone(&some_ptr);
  25. let producer = thread::spawn(move || {
  26. for i in 1..50 {
  27. let tmp = i + 1;
  28.  
  29. let new_val = Mine {
  30. val: tmp,
  31. };
  32. println!("Updating value to {:?}", new_val);
  33. prod_ptr.set(new_val);
  34. println!("Value updated, sleeping producer");
  35. thread::sleep(*prod_dur);
  36. }
  37. });
  38.  
  39. let cons_dur = Arc::clone(&twosec);
  40. let cons_ptr = Arc::clone(&some_ptr);
  41. let consumer = thread::spawn( move || {
  42. let dur = Arc::clone(&twosec);
  43. for _ in 1..8 {
  44. let value = cons_ptr.load();
  45. thread::sleep(*cons_dur);
  46. println!("{:?}", value.val);
  47. }
  48. });
  49.  
  50. producer.join().unwrap();
  51. consumer.join().unwrap();
  52. }
  53.  
  54. fn main () {
  55. test_atomic_ptr();
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement