Expand description
§prism3-rust-atomic
User-friendly atomic operations wrapper providing JDK-like atomic API.
This crate provides easy-to-use atomic types with reasonable default memory
orderings, similar to Java’s java.util.concurrent.atomic package.
§Design Goals
- Ease of Use: Hides memory ordering complexity with reasonable defaults
- Completeness: Provides high-level operations similar to JDK atomic
- Safety: Guarantees memory safety and thread safety
- Performance: Zero-cost abstraction with no additional overhead
- Flexibility: Exposes underlying types via
inner()for advanced users
§Features
- Boolean atomic type:
AtomicBool - Integer atomic types:
AtomicI8,AtomicU8,AtomicI16,AtomicU16,AtomicI32,AtomicU32,AtomicI64,AtomicU64,AtomicIsize,AtomicUsize - Floating-point atomic types:
AtomicF32,AtomicF64 - Reference atomic type:
AtomicRef<T>
§Example
use prism3_atomic::{AtomicI32, Atomic, AtomicNumber};
use std::sync::Arc;
use std::thread;
// Basic usage
let counter = AtomicI32::new(0);
counter.fetch_inc();
assert_eq!(counter.load(), 1);
// Concurrent usage
let counter = Arc::new(AtomicI32::new(0));
let mut handles = vec![];
for _ in 0..10 {
let counter = counter.clone();
let handle = thread::spawn(move || {
for _ in 0..100 {
counter.fetch_inc();
}
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
assert_eq!(counter.load(), 1000);§Author
Haixing Hu
Re-exports§
pub use atomic::Atomic;pub use atomic::AtomicBool;pub use atomic::AtomicF32;pub use atomic::AtomicF64;pub use atomic::AtomicI16;pub use atomic::AtomicI32;pub use atomic::AtomicI64;pub use atomic::AtomicI8;pub use atomic::AtomicIsize;pub use atomic::AtomicNumber;pub use atomic::AtomicRef;pub use atomic::AtomicU16;pub use atomic::AtomicU32;pub use atomic::AtomicU64;pub use atomic::AtomicU8;pub use atomic::AtomicUsize;
Modules§
- atomic
- Atomic Types