我正在寻找一个中央“对象”,多个任务可以“订阅”异步更新消息。
我正在尝试实现一个非常幼稚的线程池模型。目前线程池的职责是:
create一个新线程并返回对其的引用我的主要问题是,上述要求迫使我让线程池保留一些HashMap<Id, Thread>线程,但也在创建线程时提供对线程的引用。
最重要的是,我需要能够从任何线程内部调用线程池的方法,从而有效地最终改变 1 个或多个线程(调用者和目标)。
这是一个非功能性的实现:
use std::collections::HashMap;
use std::cell::RefCell;
type Id = u32;
type ThreadPoolRef = RefCell<ThreadPool>;
#[derive(Debug)]
struct ThreadPool {
pool: HashMap<Id, RefCell<Thread>>,
id_count: Id
}
impl ThreadPool {
fn new() -> ThreadPool {
ThreadPool {
pool: HashMap::new(),
id_count: 1
}
}
fn create(&mut self) -> &RefCell<Thread> {
let thread: RefCell<Thread> =
RefCell::new(
Thread::new(self.id_count, RefCell::new(self))
);
self.id_count = self.id_count + 1;
self.pool.insert(self.id_count, thread);
self.pool.get(&self.id_count).unwrap()
}
}
#[derive(Debug, Clone)]
struct Thread { …Run Code Online (Sandbox Code Playgroud)