Rust还是要推翻一切以前的编程思想接受Rust的思维方式
Rust核心就是所有权,你的无限循环如果占用了RefCell的话,那不释放,怎么再add watcher?这一条是违背了所有权的核心思想吧?
我觉得你提到的不会有两个函数同时使用变量,但是要求有无限循环?这怎么可能实现?
除非你写一个状态机,定时切换你的无限循环和其他任务来占用你的内存空间
但是这个不就是Rust中的Future么,本质上Future就是个状态机
继续研究的话,那Rust async编程思想就和你这些东西就比较像了
我建议去看一下Rust async的底层的东西,很多分析和资料可以查到。
我研究了一阵子,有点明白不过现在又差不多又忘了。。。
【 在 bihai 的大作中提到: 】
: 标 题: 初学Rust共享变量在无限循环中使用的问题
: 发信站: 水木社区 (Fri Sep 22 09:45:36 2023), 站内
:
: 有一个项目,是单线程的,所以希望能够避免mutex这种,最多用RefCell。现在定义一个类/结构。因为是初学,下面就是示意一下,基本功能就是两个函数,其中一个是add_watcher,把一个watcher加到vector里面。
:
: struct Server{
: watchers: RefCell<Vec<Listener>>, //Listener类实现一个函数update
: }
:
: impl Server{
: pub async fn add_watcher(&self, watcher:Listner) {
: self.watcher.borrow().push(watcher);
: }
:
: pub async fn background(&self) {
: // 这里需要一个无限循环,每秒钟运行一次
: // 要求每隔一秒钟产生一个随机数,然后调用update
: for w in .... {
: w.update(...);
: }
: }
: }
:
: 另一个是一个重点,就是需要1秒钟调用每个watcher.update(随机数)。像这种每秒钟运行一次,我感觉理论上并不是多线程,因为本质上就是有时间就通知每个watcher,然后尽量满足把新的watcher加到vector里面。这个能否避免Mutex?
:
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 72.199.121.*]
--
FROM 223.72.69.*