Crate prism3_atomic

Crate prism3_atomic 

Source
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