| Crates.io | pi_key_alloter |
| lib.rs | pi_key_alloter |
| version | 0.5.2 |
| created_at | 2023-08-29 11:55:37.046571+00 |
| updated_at | 2025-08-14 06:39:44.451677+00 |
| description | lock free Key(idx:u32, version:u32) alloter |
| homepage | |
| repository | https://github.com/GaiaWorld/pi_key_alloter.git |
| max_upload_size | |
| id | 957965 |
| size | 25,130 |
lock-free Key(idx:u32, version:u32) alloter.
alloc key:
let alloter = pi_key_alloter::KeyAlloter::new(0);
let k = alloter.alloc();
assert_eq!(0, k.index());
assert_eq!(1, k.version());
alloter.recycle(k);
let k = alloter.alloc();
assert_eq!(0, k.index());
assert_eq!(2, k.version());
let k = alloter.alloc();
assert_eq!(1, k.index());
assert_eq!(1, k.version());
The alloter can be shared across threads with an Arc:
use std::sync::Arc;
fn main() {
let alloter = Arc::new(pi_key_alloter::KeyAlloter::new());
// spawn 6 threads that append to the arr
let threads = (0..6)
.map(|i| {
let alloter = alloter.clone();
std::thread::spawn(move || {
let _ = alloter.alloc();
})
})
.collect::<Vec<_>>();
// wait for the threads to finish
for thread in threads {
thread.join().unwrap();
}
let k = alloter.alloc();
assert_eq!(6, k.index());
assert_eq!(1, k.version());
}