9个版本
0.3.0 | 2023年10月19日 |
---|---|
0.2.5 | 2023年2月24日 |
0.2.4 | 2021年5月13日 |
0.2.3 | 2021年4月1日 |
0.1.0 | 2020年2月12日 |
#99 in 并发
279,393每月下载量
用于211个crate(12个直接使用)
53KB
552 代码行
spinning_top
基于lock_api
提供的抽象的简单自旋锁crate。
示例
首先,将crate作为依赖项导入到你的Cargo.toml
中。然后你可以按以下方式使用它
use spinning_top::Spinlock;
fn main() {
// Wrap some data in a spinlock
let data = String::from("Hello");
let spinlock = Spinlock::new(data);
make_uppercase(&spinlock); // only pass a shared reference
// We have ownership of the spinlock, so we can extract the data without locking
// Note: this consumes the spinlock
let data = spinlock.into_inner();
assert_eq!(data.as_str(), "HELLO");
}
fn make_uppercase(spinlock: &Spinlock<String>) {
// Lock the spinlock to get a mutable reference to the data
let mut locked_data = spinlock.lock();
assert_eq!(locked_data.as_str(), "Hello");
locked_data.make_ascii_uppercase();
// the lock is automatically freed at the end of the scope
}
Spinlock::new
是一个const
函数。这使得Spinlock
类型可以在静态中使用
use spinning_top::Spinlock;
static DATA: Spinlock<u32> = Spinlock::new(0);
fn main() {
let mut data = DATA.lock();
*data += 1;
assert_eq!(*data, 1);
}
许可
许可如下
- Apache License,版本2.0 (LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
除非你明确声明,否则你故意提交的、根据Apache-2.0许可证定义的作品中的任何贡献,都应按上述方式双许可,不附加任何额外条款或条件。
依赖
~175KB