【发布时间】:2012-11-07 10:32:55
【问题描述】:
我正在编写独立于操作系统的无锁队列,队列工作正常(使用默认的 windows\linux atomic CAS),但我想让队列在不改变 linux 和 windows 的情况下工作。所以我想我应该在汇编程序中编写自己的 CAS,还是有其他方法可以实现它?
到目前为止,我有这个代码:
global _CAS
_CAS:
mov eax, [esp+4]
mov edx, [esp+8]
mov ecx, [esp+12]
;XCHG eax, edx <- this function works fine
CMPXCHG ecx, eax, ebx
ret
我知道我仍然需要在 CMPXCHG 之前添加 lock 并且它应该适用于结构,但现在我更感兴趣的是让它工作。
我使用 nasm-2.10.05 编译这个命令nasm.exe -f elf -o cas.o cas.asm
我得到这个错误testas\cas.asm:14: error: invalid combination of opcode and operands
【问题讨论】:
-
这种方法将您限制在 x86 平台上。
标签: c linux windows assembly atomic