微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rust 单线程环境中的可变引用

如何解决Rust 单线程环境中的可变引用

关于单线程环境中的可变引用,我有一个非常具体的问题,我会尽量解释清楚。我有一个在具有哈希图的单个线程中运行的服务。这个哈希图只能从那个单线程访问。访问哈希图是在以下情况下完成的。

  1. 基于另一个线程发送的信号(我不确定实际实现),将在包含哈希图的线程中触发回调。当该回调发生时,我需要可变地访问哈希图并添加一个条目。 (事件A)

  2. 基于周期性事件(如滴答),在包含哈希图的线程中触发另一个回调。当该回调发生时,我想清空哈希图并在 http 请求中发送数据。 (http 请求与问题无关)(事件 B)

在这两种情况下,hashmap 只能从包含服务的线程访问。但我担心的是,在这两种情况下,我都需要有可变引用,而且我知道有 1 个以上的可变引用会导致恐慌。但由于这是单线程的,我觉得这不会有问题。但我不确定单线程并发是如何工作的,以及上下文切换是如何完成的。(甚至可能一次执行一件事情,其他等待或暂停的任务在某处保存了一个上下文?)。因此,例如,假设事件 A 被执行,在此过程中它将被暂停并且事件 B 发生。是否有可能来自事件 A 的可变引用被临时存储在某处,然后当事件 B 被触发时,当 B 尝试对哈希图具有可变引用时会发生恐慌?

PS - 也许这是一个愚蠢的问题。我是低级编程的新手,也是 Rust 的新手。如果有什么不清楚的,请发表评论,我会提供更多信息。如果您能提供描述性清晰的答案,我将不胜感激,因为我对这些东西还不熟悉。还有什么理由使用 RefCell 吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?