Advertisement
Guest User

Can't iterate RwLockReadGuard<Vec>

a guest
Apr 25th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. use std::thread;
  2. use std::sync::{RwLock,Arc};
  3. fn main() {
  4.     let primes=Arc::new(RwLock::new(vec![2,3,5]));
  5.     let primes2=primes.clone();
  6.     let primes_w=primes.write().unwrap();
  7.     let handle=thread::spawn(move || {
  8.         let primes_r=primes2.read().unwrap();
  9.         for i in &primes_r {
  10.             println!("{:?}", i);
  11.         }
  12.     });
  13.     primes_w.push(7);
  14.     drop(primes_w);
  15.     handle.join();
  16. }
  17.  
  18. /*
  19. error[E0277]: the trait bound `&std::sync::RwLockReadGuard<'_, std::vec::Vec<{integer}>>: std::iter::Iterator` is not satisfied
  20.   --> test.rs:9:3
  21.    |
  22. 9  |            for i in &primes_r {
  23.    |  ___^ starting here...
  24. 10 | |                  println!("{:?}", i);
  25. 11 | |          }
  26.    | |___^ ...ending here: the trait `std::iter::Iterator` is not implemented for `&std::sync::RwLockReadGuard<'_, std::vec::Vec<{integer}>>`
  27.    |
  28.    = note: `&std::sync::RwLockReadGuard<'_, std::vec::Vec<{integer}>>` is not an iterator; maybe try calling `.iter()` or a similar method
  29.    = note: required by `std::iter::IntoIterator::into_iter`
  30.  
  31. error: aborting due to previous error
  32. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement