大佬教程收集整理的这篇文章主要介绍了x86 – Linux / SMP自旋锁不必要地慢吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
1: lock: btsl $0,slp jnc 3 2: TESTB $1,slp jne 2 jmp 1 3:
现在我原本以为嵌套循环似乎很浪费你可以实现类似的东西:
1: lock: btsl $0,slp jc 1
这会简单得多.但是,我知道为什么他们这样做,因为锁影响其他@R_419_2488@并且btsl的时间比一个简单的TESTB的时间更大.
我无法理解的一件事是旋转锁的后续释放.该书指出它产生以下结果:
lock: btrl $0,slp
我的问题基本上是为什么?在我看来,lock / mov-immediate组合更快.
您不需要将旧状态转换为进位标志,因为遵循内核无错误的规则(假设在所述内核中的许多其他位置),旧状态将为1(您不会试图释放它,如果你还没有获得它).
并且mov比btrl快得多,至少在386上.
那我错过了什么?
在后来的芯片上更改了那些指令的时间吗?
自书籍印刷以来内核是否已更新?
相关代码在asm/spinlock.h(对于x86).解锁操作确实比书中说的更快更简单:
static __always_inline void __ticket_spin_unlock(arch_spinlock_t *lock) { asm volatile(UNLOCK_LOCK_PREFIX "incb %0" : "+m" (lock->slock) : : "memory","cc"); }
因为inc比btr快约8或9倍.
希望这可以帮助;如果没有,我会很乐意深入挖掘.
以上是大佬教程为你收集整理的x86 – Linux / SMP自旋锁不必要地慢吗?全部内容,希望文章能够帮你解决x86 – Linux / SMP自旋锁不必要地慢吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。