相关疑难解决方法(0)

Rust 中有类似 NodeJS 的 EventEmitter 的功能吗?

我正在寻找一个中央“对象”,多个任务可以“订阅”异步更新消息。

node.js rust

4
推荐指数
1
解决办法
3554
查看次数

Rust 中的共享循环引用

我正在尝试实现一个非常幼稚的线程池模型。目前线程池的职责是:

  • 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)

rust

2
推荐指数
1
解决办法
1418
查看次数

标签 统计

rust ×2

node.js ×1