想要了解互斥锁在x86汇编程序中的外观。最初使用C ++ 11编写了一个C ++应用程序:
#include <mutex>
int main(){
std::mutex m;
volatile int i = 0;
m.lock();
i = 6;
m.unlock();
return 0;
}
但是当我检查了程序集输出文件时,有1000多行asm,我看不到任何原子或LOCK
指令。
继续前进,我发现这个网站显示了如何在x86中编写互斥锁:
http://forum.codecall.net/topic/64301-writing-a-simple-lock-mutex-in-cassembly/
我在白皮书中看到其他x86互斥实现看起来要复杂得多(有些使用CMPXCHG),所以我想知道下面的代码是否包含任何隐藏的竞争条件或问题?代码似乎太简单了。
答案 0 :(得分:0)
如果互斥锁已被锁定,则没有任何等待,这是破坏的实现。
对于一些简单的实现,请参阅此问题:The cost of atomic counters and spinlocks on x86(_64)