fast-able
High-performance synchronization library / 高性能同步数据结构库
Features / 特性
- SyncHashMap: Thread-safe HashMap / 线程安全的 HashMap
- SyncVec: Thread-safe Vec / 线程安全的 Vec
- SyncBtreeMap: Thread-safe BtreeMap / 线程安全的 BtreeMap
- WaitGroup: Async/blocking WaitGroup / 支持异步/同步的 WaitGroup
Usage / 使用方法
SyncHashMap
SyncHashMap provides a thread-safe hash map implementation.
use fast_able::SyncHashMap;
use std::sync::Arc;
use std::thread;
fn main() {
let map = Arc::new(SyncHashMap::<String, String>::new());
map.insert("/".to_string(), "1".to_string());
map.insert("/js".to_string(), "2".to_string());
let map_clone = map.clone();
let handle = thread::spawn(move || {
map_clone.insert("/fn".to_string(), "3".to_string());
if let Some(val) = map_clone.get("/js") {
println!("In thread: /js = {}", *val);
}
});
handle.join().unwrap();
assert_eq!("1", *map.get("/").unwrap());
assert_eq!("3", *map.get("/fn").unwrap());
println!("Map content: {:?}", map);
}
SyncVec
SyncVec provides a thread-safe vector implementation.
use fast_able::SyncVec;
use std::sync::Arc;
use std::thread;
fn main() {
let vec = Arc::new(SyncVec::<i32>::new());
vec.push(1);
vec.push(2);
let vec_clone = vec.clone();
let handle = thread::spawn(move || {
vec_clone.push(3);
if let Some(mut val) = vec_clone.get_mut(0) {
*val = 100;
}
});
handle.join().unwrap();
println!("Vec len: {}", vec.len());
println!("Item at 0: {:?}", *vec.get(0).unwrap()); println!("Item at 2: {:?}", *vec.get(2).unwrap()); }
WaitGroup
WaitGroup supports both synchronous and asynchronous waiting.
use fast_able::wg::WaitGroup;
use std::time::Duration;
use tokio::time::sleep;
#[tokio::main]
async fn main() {
let wg = WaitGroup::new();
let wg1 = wg.clone();
tokio::spawn(async move {
sleep(Duration::from_secs(1)).await;
println!("Task 1 done");
drop(wg1); });
let wg2 = wg.clone();
tokio::spawn(async move {
sleep(Duration::from_secs(1)).await;
println!("Task 2 done");
drop(wg2);
});
wg.wait_async().await;
println!("All tasks done");
}