2

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

有什么方法可以改进它以使其更快吗?

谢谢。

4

2 回答 2

5

这样的事情怎么样(我知道这是 KeAcquireSpinLock 实现)。不幸的是,我的 at&t 程序集很弱。

spin_lock:
    rep; nop
    test lockValue, 1
    jnz spin_lock
    lock bts lockValue
    jc spin_lock
于 2012-08-12T15:05:24.607 回答
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; }
于 2012-11-01T20:48:57.087 回答