| Crates.io | xstm |
| lib.rs | xstm |
| version | 0.1.0 |
| created_at | 2025-03-08 17:44:26.796681+00 |
| updated_at | 2025-03-08 17:44:26.796681+00 |
| description | A Rust-implemented Software Transactional Memory (STM) library using TL2 (Transactional Locking II) algorithm |
| homepage | |
| repository | https://github.com/xstater/xstm |
| max_upload_size | |
| id | 1584684 |
| size | 55,710 |
A Rust-implemented Software Transactional Memory (STM) library using TL2 (Transactional Locking II) algorithm
一个Rust编写的STM(软件事务内存)库, 使用TL2(Transactional Locking II)算法
事务失败会重试, 不能在事务块中执行一些重试会导致错误的代码, 最好是执行纯函数
事务变量TVar<T>中的T必须满足T: Copy, 因为TL2是一个乐观并发算法,必须要求事务变量可以安全地并发读取
T: Clone的类型, 也是可以安全的用于TVar的, 但也不是所有的T: Clone都可以用。因为TL2算法使用的是双校验读(大概是“检查版本”-“读数据(Copy/Clone)”-“再次检查版本”), 这种方法确实能确保在最后读到的数据是有效的。但在读的过程中(Clone),可能会读到出错的脏数据,如果Clone中使用了这些脏数据,可能会导致错误。例如Clone中需要根据读到size分配内存,而此时读到了一个错误的大小(比如-10086), 这就会导致很严重的问题事务调用atomically函数不能嵌套使用
Transaction接口有太多生命周期标注,且和STM的操作上下文强绑定,应当提供更加通用的接口,最好能支持除TL2以外的其它软件事务内存算法or_else组合子TVar<T: Copy>的限制
T: Copy实现