互斥体的定义

时间:2014-08-20 13:13:13

标签: assembly x86 locking mutex

想要了解互斥锁在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),所以我想知道下面的代码是否包含任何隐藏的竞争条件或问题?代码似乎太简单了。

1 个答案:

答案 0 :(得分:0)

如果互斥锁已被锁定,则没有任何等待,这是破坏的实现。

对于一些简单的实现,请参阅此问题:The cost of atomic counters and spinlocks on x86(_64)