跳到主内容

STM学习

STM是软件事务内存(software transaction memory)的简称。 我在PPCP中对它进行了一些学习,这里做个记录。

为什么我们需要STM

在多线程编程中,我们已经有了锁这种工具,那为什么我们还需要STM呢? 答案是这样的, 基于锁的程序是不可组合的.集体表现在,

  • 即使两个各自无死锁的程序,不能保证它们的组合程序是无死锁
  • 即使两个各自满足原子性的程序,不能保证他们的组合程序满足原子性

这个特性使得基于锁的编程难度骤升。而STM能够很好得解决这个问题。

STM的优点

  • 事务是可以组合的
  • 容易支持阻塞
  • 通常是乐观的,读并行自动具有可扩展性
  • 没有死锁问题

与Database中的事务不同的是,STM不需要具有Durable性质,只需要有ACI性质。

STM库

在Java中并没有原生实现STM,但是我们可以使用Multiverse库, 它的最新版本是2012年四月发布的0.7版本.

注释