| Crates.io | pi_vec_remain |
| lib.rs | pi_vec_remain |
| version | 0.2.1 |
| created_at | 2024-12-12 11:49:39.050937+00 |
| updated_at | 2025-04-10 09:04:13.024476+00 |
| description | vec remain range |
| homepage | |
| repository | https://github.com/GaiaWorld/pi_arr.git |
| max_upload_size | |
| id | 1481197 |
| size | 8,027 |
Multi thread safe array structure, auto-expansion array. All operations are lock-free.
set an element to a arr and retrieving it:
let arr = pi_arr::Arr::new();
arr.set(0, 42);
assert_eq!(arr[0], 42);
The arr can be shared across threads with an Arc:
use std::sync::Arc;
fn main() {
let arr = Arc::new(pi_arr::Arr::new());
// spawn 6 threads that append to the arr
let threads = (0..6)
.map(|i| {
let arr = arr.clone();
std::thread::spawn(move || {
arr.set(i, i);
})
})
.collect::<Vec<_>>();
// wait for the threads to finish
for thread in threads {
thread.join().unwrap();
}
for i in 0..6 {
assert!(arr.iter().any(|(_, &x)| x == i));
}
}
Elements can be mutated through fine-grained locking:
use std::sync::{Mutex, Arc};
fn main() {
let arr = Arc::new(pi_arr::Arr::new());
// insert an element
arr.set(0, Mutex::new(1));
let thread = std::thread::spawn({
let arr = arr.clone();
move || {
// mutate through the mutex
*arr[0].lock().unwrap() += 1;
}
});
thread.join().unwrap();
let x = arr[0].lock().unwrap();
assert_eq!(*x, 2);
}