- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上下文
作为练习,我试图在Rust中重新实现https://github.com/urbanairship/sarlacc-pit。
Sarlacc-pit将外部源镜像到内存中的数据结构(Set/Map/Etc)。图书馆的客户纯粹是根据馆藏开展 Activity ,却不知道其内容在幕后发生变化。
问题
客户端需要保留对集合的不变引用,而单个更新线程保留可变的引用以更新其内容。这直接违反了 rust 的保证,但在这种情况下应具有以下粗略结构,这是安全的:
pub struct Map<K, V> {
delegate: SomeReferenceType<Arc<HashMap<K, V>>>
}
impl<K, V> Map<K, V> {
pub fn get(&self, k: &K) -> Option<&V> {
self.delegate.borrow().get(k)
}
fn update(&mut self, new_delegate: HashMap<K, V>) {
self.delegate.set(Arc::new(new_delegate));
}
}
pub struct UpdateService<K, V> {
collection: Arc<Map<K, V>>
}
impl<K, V> UpdateService<K ,V> {
pub fn get_collection(&self) -> Arc<Map<K, V>> {
collection.clone()
}
// Called from a thread run on a cadence
fn update_collection(&mut self) {
let new_value = /* fetch and process value from backing store */
self.collection.borrow_mut().update(new_value);
}
}
最佳答案
如果从另一个线程调用update_collection
,您如何保证主线程不在同一时间从集合读取数据?使用您提供的信息,您需要像RwLock
或Mutex
这样的代码来确保此安全。
您已经断言您认为这是安全的。如果您的系统上存在一个未公开的约束条件,可让您保证不会发生同时进行的读写操作,则可能有一种方法可以将其合并到类型中。但是,否则无法给出更好的答案。
例如,如果不经常进行更新,则可以满足您的用例,以使用集合的三个副本,并在每次修改后交换它们:
关于rust - 在Rust中使用单个增变器进行无锁数据共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59483183/
1、修改数据 复制代码代码如下: DataRow dr =
数据库操纵基本流程为: 1、连接数据库服务器 2、选择数据库 3、执行SQL语句 4、处理结果集 5、打印操作信息 其中用到的相关函数有 •resource m
CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写,它是普通应用程序的缩影。如果您掌握了某框架的CRUD编写,那么意味可以使用该框架创建普通应用程序了
项目结构: 添加页面: &
本文实例讲述了android操作sqlite数据库(增、删、改、查、分页等)及listview显示数据的方法。分享给大家供大家参考,具体如下: 由于刚接触android开发,故此想把学到的基础知识
我是一名优秀的程序员,十分优秀!