3个版本

0.4.3 2022年6月27日
0.4.2 2022年6月3日
0.4.0 2022年6月1日

#734并发

Apache-2.0

50KB
1K SLoC

Stronghold Read-Log-Update 并发同步

此crate提供了一个提交时锁定软件事务内存(STM)的实现。实现中使用了BoxedMemory进行所有相关内存分配,其中涉及敏感数据。因此,敏感数据在明文内存中的暴露时间被减少到最小,使得STM成为并行环境中的理想框架。 todo

概述

动机

Stronghold使用actix作为actor框架来管理底层系统内的并发操作。虽然actor系统不是一个糟糕的选择,因为它抽象了复杂的同步机制,但actix明确地拥有底层的执行器框架,这反过来使得在共享环境中集成Stronghold变得困难。此外,actix在一个单线程的事件循环上运行,这使得线程级别的actor隔离变得过时。

与actor系统的优势

在基于STM(软件事务内存)的系统里,所有具有可变状态的对象都是事务性的,对对象的操作都透明地使用底层系统。这允许在运行时将受保护的内存与暴露的内存隔离开来。事务总是安全的;内部冲突会自动回滚并重试,直到事务成功。对可变内存的操作是可组合的。由于只有写操作实际上会改变对象,因此必须将此操作通知其他线程。最近的研究描述了多种方法,我们认为阻塞/重试其他事务是最可行的方法,以确保数据一致性。如果事务已经完成,并且所有读取操作都经过验证,则将产生的工作提交给实际对象。其他线程在操作同一对象时,永远不会看到对该对象所做的更改。这里描述的STM使用了一种懒回滚事务的方法。STM也可以描述为一种乐观锁定方法:在发生冲突之前,对内存的操作被认为是安全的,事务可以安全地回滚并重试。

集成

(文本内容在此处)

概述

(文本内容在此处)

功能

[x] - 多个并发读写 [x] - 无锁集成 [x] - (可选)集成了受保护内存处理

开放性问题/待办事项

  • 受功能门控的安全内存
  • RLU(运行时上下文)是全局上下文,必须可以从许多线程以可变方式访问,因为可以随时生成新上下文
  • 检查try_lock是否需要为日志返回完整副本,或者是否需要延迟更改

依赖项

~0.5–1MB
~21K SLoC