我正在尝试在我的代码中实现一个自旋锁,但我基于Wikipedia实现的自旋锁导致性能极慢。
int lockValue = 0;
void lock() {
__asm__("loop: \n\t"
"movl $1, %eax \n\t"
"xchg %eax, lockValue \n\t"
"test %eax, %eax \n\t"
"jnz loop");
}
有没有办法改善这一点以加快速度?
感谢。
答案 0 :(得分:5)
这样的事情怎么样(我理解这是KeAcquireSpinLock实现)。不幸的是,我的at& t组装很弱。
spin_lock:
rep; nop
test lockValue, 1
jnz spin_lock
lock bts lockValue
jc spin_lock
答案 1 :(得分:4)
"movl $1,%%edx \n\t" // edx = 1;
".set lockloop,. \n\t" // symbol lockloop set to pc
"xorl %%eax,%%eax \n\t" // eax = 0;
"lock cmpxchgl %%edx,(%%ebx)\n\t" // if (*mu_ptr == eax) *mu_ptr = edx;
// else { eax = *mu_ptr;
"jnz lockloop \n\t" // goto lockloop; }