Introduction to Intel Transactional Synchronization Extension (TSX)
本文将介绍TSX的相关知识。包含TSX的motivation与使用接口。
1 没有TSX时
如果多线程对Excel表格操作时,需要加锁。但是,可以采用不同粒度的锁。
1.1 粗粒度锁
对整个Excel表格加锁。这种方式实现容易,但是却存在如下问题:
线程1操作第1行与第2行数据;线程2操作第3和第4行数据。(1)
线程1与线程2操作的数据没有冲突,但是由于是对整个Excel表格加锁的,因此线程1和线程2无法并发。由此可见粗粒度锁可能会降低并发度。
1.2 细粒度锁
粗粒度锁可能会降低并发度,因此,可以采用细粒度锁。例如,可以以Excel表格中的每一行为粒度进行加锁,从而提高并发度。但是,细粒度的锁却会带来其他问题:
线程1操作第1行和第2行数据;线程2操作第2行和第1行数据。(2)
在这种场景下,可能会产生死锁。所以细粒度锁的加锁解锁方案需要仔细设计,避免死锁和其他很多问题。
2 TSX的motivation
针对粗粒度锁与细粒度锁存在的问题,TSX应运而生。
当硬件支持TSX,程序开发人员以Excel表格为粒度进行加锁时;当出现(1)所示的情况,硬件保证线程1和线程2可以并发访问,从而提高并发度。
逻辑上TSX是一把粗粒度的锁,将包含事务性的操作的critical section包起来;由硬件自动检测操作中的数据冲突,保证事务性操作的正确性,发掘操作间的并行性,实现上类似每个条目都有细粒度的锁,这被称作lock elision。
3 编程接口
TSX的模型类似传统的临界区。提供两种编程接口:HLE(Hardware Lock Elision)和RTM(Restricted Transactional Memory)。
3.1 HLE
事务性操作失败(abort)的结果是重新执行传统的有锁代码。
3.2 RTM
(1) 事务性操作失败(abort)的后续操作入口由xbegin指定。
(2) xabort指令通过eax返回一个错误码,用于后续分原因处理。
由此可见,RTM的模型更加灵活。
参考资料: