有没有简单的方法可以提高此自旋锁功能的性能?

时间:2012-08-12 14:57:17

标签: c inline-assembly spinlock

我正在尝试在我的代码中实现一个自旋锁,但我基于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");
}

有没有办法改善这一点以加快速度?

感谢。

2 个答案:

答案 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; }