#future #mutex

已删除 futures-mutex

Future 的互斥锁

使用旧 Rust 2015

0.2.1 2018年1月5日
0.2.0 2017年7月23日
0.1.2 2017年6月16日
0.1.1 2017年4月16日
0.1.0 2017年4月16日

#155 in #mutex


tokio-mqttc 中使用

Apache-2.0

14KB
238

futures-mutex [已弃用]

我将不再支持此项目。它不再被我自己使用,并且与死锁有关的问题很大。Rust 中将出现弃用警告。

Future 的互斥锁

Crates.io Docs.rs

用法

将此添加到您的 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