最近我一直在阅读很多关于事务性内存的文章。TM 有一些炒作,所以很多人都对它充满热情,它确实为痛苦的锁定问题提供了解决方案,但你也经常看到抱怨:
- 你不能做 I/O
- 你必须编写你的原子部分,以便它们可以运行多次(小心你的局部变量!)
- 软件事务内存性能不佳
- [在此处插入您的小毛病]
我理解这些担忧:通常情况下,您会发现有关 STM 的文章仅在某些特定硬件上运行,这些硬件支持一些非常漂亮的原子操作(如LL/SC),或者它必须由一些虚构的编译器支持,或者它需要所有对内存的访问都是事务性的,它引入了类型约束 monad 样式等。最重要的是:这些都是真正的问题。
这让我问自己:是什么反对本地使用事务内存来代替锁?这是否已经带来了足够的价值,还是必须在所有地方使用事务内存(如果使用的话)?