Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::{
- mem,
- sync::{
- atomic::{AtomicPtr, Ordering},
- Arc,
- },
- };
- struct A(AtomicPtr<String>);
- impl A {
- fn replace(&self, s: String) -> Arc<String> {
- let s = Arc::new(s);
- let s = Arc::into_raw(s) as *mut String;
- let prev = self.0.swap(s, Ordering::SeqCst);
- unsafe { Arc::from_raw(prev) }
- }
- fn get(&self) -> Arc<String> {
- let current = self.0.load(Ordering::SeqCst);
- let current = unsafe { Arc::from_raw(current) };
- // Increment the counter because we aren't taking ownership of the value in self
- mem::forget(current.clone());
- current
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement