求一自旋锁算法代码

来源:百度知道 编辑:UC知道 时间:2024/06/09 10:22:22
最好是c/c++ or asm代码
;

比较简单的一个实现, 1代表上锁, 0代表没上锁

void mylock(int *alock)
{
__asm {
mov eax, 1
mov ebx, dword ptr alock
L1:
//这里用lock前缀, 原子的交换alock和eax的内容
lock xchg [ebx], eax
//如果原来alock就是1, 说明原来已经上锁, 自旋
cmp eax, 1
je L1
}
}

void myunlock(int *alock)
{
*alock = 0;
}

这个简单实现的性能不是太好, 同时也不允许线程多次进入一个锁, 可以在这个基础上继续改进