使用旧 Rust 2015
0.2.1 |
|
---|---|
0.2.0 |
|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#155 in #mutex
在 tokio-mqttc 中使用
14KB
238 行
futures-mutex [已弃用]
我将不再支持此项目。它不再被我自己使用,并且与死锁有关的问题很大。Rust 中将出现弃用警告。
Future 的互斥锁
用法
将此添加到您的 Cargo.toml
[dependencies]
futures-mutex = "0.2.1"
然后,将其添加到您的包中
extern crate futures_mutex;
FutMutex<T>
与 futures::sync::BiLock
的 API 非常相似,但是它可以有超过两个句柄。
许可
futures-mutex
在 Apache 许可证 v2.0 下分发。有关许可证的完整文本,请参阅 LICENSE 文件。
lib.rs
:
Future 的互斥锁
API 与 futures::sync::BiLock
类似,但是可以克隆为所需的任何数量的句柄。
extern crate futures;
extern crate futures_mutex;
use futures::{Future, Poll, Async};
use futures_mutex::FutMutex;
struct AddTwo {
lock: FutMutex<usize>
}
impl Future for AddTwo {
type Item = usize;
type Error = ();
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
match self.lock.poll_lock() {
Async::Ready(mut g) => {
*g += 2;
Ok(Async::Ready(*g))
},
Async::NotReady => Ok(Async::NotReady)
}
}
}
fn main() {
let lock1: FutMutex<usize> = FutMutex::new(0);
let lock2 = lock1.clone();
let future = AddTwo { lock: lock2 };
// This future will return the current value and the recovered lock.
let used_lock = lock1.lock().map(|b| (*b, b.unlock()));
let _ = future.join(used_lock).map(|(add_two, (value, _))| {
assert_eq!(add_two, value);
}).wait().unwrap();
}
依赖项
~67KB