这段代码有什么问题?编译器为解锁函数中的dec返回不明确的操作数大小。但是,有qword关键字(大小说明符)。
class spinlock
{
qword locked;
public:
spinlock() : locked(-1)
{ }
void lock() __attribute__((noinline));
void unlock() __attribute__((noinline));
};
void spinlock::lock()
{
asm(
".intel_syntax noprefix;"
"xor rcx, rcx;"
"loop:;"
"lock xchg qword [%0], rcx;"
"test rcx, rcx;"
"jz loop;"
".att_syntax noprefix;"
:
: "r"(&locked)
: "rcx"
);
}
void spinlock::unlock()
{
asm(
".intel_syntax noprefix;"
"lock dec qword [%0];"
".att_syntax noprefix;"
:
: "r"(&locked)
:
);
}