Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.74 KB | None | 0 0
  1. use std::cell::UnsafeCell;
  2. use std::thread;
  3.  
  4. struct ExtremelyBadIdea(pub *mut u128);
  5.  
  6. unsafe impl Send for ExtremelyBadIdea { }
  7. unsafe impl Sync for ExtremelyBadIdea { }
  8.  
  9. fn main() {
  10. const LEN: usize = 10000;
  11. let buf = UnsafeCell::new([0u128; LEN]);
  12. let mut handles = Vec::new();
  13.  
  14. for _ in 0..100 {
  15. let handle = ExtremelyBadIdea(buf.get() as *mut u128);
  16.  
  17. handles.push(thread::spawn(move || {
  18. let ptr = handle.0;
  19.  
  20. for i in 0..LEN {
  21. unsafe { *ptr.add(i) = *ptr.add(i) + 4_999_999_999; }
  22. }
  23. }));
  24. }
  25.  
  26. for h in handles {
  27. h.join().unwrap();
  28. }
  29.  
  30. for i in 0..100 {
  31. println!("{}", unsafe { &*buf.get() }[i]);
  32. }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement