Concurrency 如何使用Rust futures在并发运行的任务之间共享有限的资源?

Concurrency 如何使用Rust futures在并发运行的任务之间共享有限的资源?,concurrency,rust,future,Concurrency,Rust,Future,我正在实现一个在Rust中异步处理某种任务的系统。为了做到这一点,我使用的板条箱(0.2测试版) 处理这些任务之一需要临时但独占地使用特定类型的资源,其中系统中有固定数量的资源 请记住,这一切都发生在并发上下文中:多个线程可能试图同时处理一个任务。我一直在使用的界面的简化版本如下: //系统持有固定数量的这些任务,而TaskFuture需要一个来完成。 发布结构资源; 发布结构系统{ //系统应该如何保存资源? } impl系统{ pub fn queue_task(&self,数据:TaskD

我正在实现一个在Rust中异步处理某种任务的系统。为了做到这一点,我使用的板条箱(0.2测试版)

处理这些任务之一需要临时但独占地使用特定类型的资源,其中系统中有固定数量的资源

请记住,这一切都发生在并发上下文中:多个线程可能试图同时处理一个任务。我一直在使用的界面的简化版本如下:

//系统持有固定数量的这些任务,而TaskFuture需要一个来完成。
发布结构资源;
发布结构系统{
//系统应该如何保存资源?
}
impl系统{
pub fn queue_task(&self,数据:TaskData)->TaskFuture{
TaskFuture{system:self}
}
}
发布结构TaskFuture{
类型项=?;
类型错误=?;
fn轮询(&mut self,cx:&mut Context)->结果{
/*我如何实现这一点*/
}
}
可以看出,我不太确定实施这样一个系统的最佳方式是什么

我的第一个想法是让
系统
持有多个
互斥锁
s,并让
TaskFuture::poll
尝试获取一个(如果可用),如果不返回
NotReady
(尽管我不确定在这种情况下我以后会如何唤醒未来)


无论如何,我觉得除非绝对必要,否则我应该避免在基于
futures
的上下文中使用
std
同步原语,那么是否有一种更惯用的基于
futures
的解决方案呢

对我来说,这听起来像一个“池”,例如数据库连接池、线程池等等@Shepmaster是的,这就是它的确切含义。