3个版本

0.1.2 2023年1月4日
0.1.1 2023年1月4日
0.1.0 2023年1月4日

#410 in 内存管理

Apache-2.0

25KB
549

mvcc_cell 是一个基于多版本并发控制(MVCC)的事务内存系统。

事务完全隔离并且对受控值进行了序列化

  • 每个事务看到的是其开始时间点的一个固定快照
  • 任何对事务已访问的单元的并发提交都将阻止该事务提交

示例用法

use mvcc_cell::{Mvcc,MvccCell};
let mvcc = Mvcc::new();

// Create a transactional slot
let slot = MvccCell::new(&mvcc, Box::new(0));

// Start concurrent transactions
let mut t1 = mvcc.begin();
let mut t2 = mvcc.begin();
let ro = mvcc.begin();

// Uncommitted values are not visible outside the transaction
t1[&slot] = 42;
assert_eq!(t2[&slot], 0);

// First committer wins, regardless of actual modification order
t2[&slot] = 7;
assert!(t2.try_commit().is_ok());

// Failed commits return the transaction, so you can still read
// the computed values
let t1_fail = t1.try_commit().unwrap_err();
assert_eq!(t1_fail[&slot], 42);

// Transactions always read the values that were current when
// begin() was called.
assert_eq!(ro[&slot], 0);
assert_eq!(mvcc.begin()[&slot], 7);

依赖项

~0.4–6MB
~11K SLoC