TAS 与 TTAS 锁定

TAS vs TTAS locking

我正在比较 TAS 与 TTAS 锁定。 这是代码:

助教:

.globl _tas_lock_acquire
_tas_lock_acquire:
    repeat:
        lock btsw [=10=], (%rdi)
    jc repeat
    ret

.globl _tas_lock_release
_tas_lock_release:
    lock btrw [=10=], (%rdi)
    ret

TTAS:

.globl _ttas_lock_acquire
_ttas_lock_acquire:
    try_lock:
        lock btsw [=11=], (%rdi)
        jc spinwait
        ret
    spinwait:
        btsw [=11=], (%rdi)
        jc spinwait
        jmp try_lock

.globl _ttas_lock_release
_ttas_lock_release:
    btrw [=11=], (%rdi)
    ret

如果 TAS 锁定的性能类似于 c++11 atomic_flag(无差异),则 TTAS 明显较慢(3 个数量级)。 我正在测试“Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz”。

我的错误是什么导致了速度变慢?

哦,我的错误在 _ttas_lock_acquire 实现中,spinwait 标签。 应该是“bt”指令,不是“bts”。