当我想要它生成一个有效的锁时,C99 gcc优化了while循环

时间:2014-01-20 10:35:51

标签: c multithreading gcc locking

在拆解我的程序时,我注意到了;

while (!block->meta.lock);

将编译成;

0x0040167f <+111>:   jmp    0x40167f <gc_malloc+111>

显然这是一个无用的无限循环。我正在使用C99,所以我不能让它变得不稳定。

我目前的解决方案:

while (!block->meta.lock) {
    __sync_synchronize();
}

这会产生很多的额外装配。我真正想要生成的是等同于rep nop锁; 见What does "rep; nop;" mean in x86 assembly?

我如何向gcc暗示这一点?

0 个答案:

没有答案