这一次我们来介绍一下crossbeam-util和crossbeam-queue,中的一些东西和用法。
crossbeam-util
AtomicCell
这个是并发版的std::cell::Cell
,可以对&self
就起到变更内部值的效果,主要会用到下面三个方法:
use crossbeam_utils::atomic::AtomicCell;
let a = AtomicCell::new(7);
assert_eq!(a.load(), 7);
assert_eq!(a.swap(8), 7);
assert_eq!(a.load(), 8);
a.store(9);
assert_eq!(a.load(), 9);
ShardedLock
这个和std::sync::RwLock
功能相同,不过相对来说读会更快而写更慢。大家在实际使用时可以根据业务的特点酌情选择。
use crossbeam_utils::sync::ShardedLock;
let lock = ShardedLock::new(5);
// 读的锁可以同时获取
{
let r1 = lock.read().unwrap();
let r2 = lock.read().unwrap();
assert_eq!(*r1, 5);
assert_eq!(*r2, 5);
}
// 写的锁只能有一个
{
let mut w = lock.write().unwrap();
*w