C99 gcc在I';我希望它能产生一个有效的锁

C99 gcc在I';我希望它能产生一个有效的锁,c,multithreading,gcc,locking,C,Multithreading,Gcc,Locking,当分解我的程序时,我注意到 while (!block->meta.lock); 将被汇编成: 0x0040167f <+111>: jmp 0x40167f <gc_malloc+111> 这将生成一批额外装配。我真正想要生成的是一个repnop锁; 看 我如何向gcc暗示这一点?你所说的“我在使用C99,所以我不能使其易失性”是什么意思?易失性是C89标准中的一种,在这之前很久就被使用过。真的吗?我很肯定我试过了。我会就此与您联系……确保您的loc

当分解我的程序时,我注意到

while (!block->meta.lock);
将被汇编成:

0x0040167f <+111>:   jmp    0x40167f <gc_malloc+111>
这将生成一批额外装配。我真正想要生成的是一个
repnop
锁; 看


我如何向gcc暗示这一点?

你所说的“我在使用C99,所以我不能使其易失性”是什么意思?易失性是C89标准中的一种,在这之前很久就被使用过。真的吗?我很肯定我试过了。我会就此与您联系……确保您的
lock
字段可以自动读取。即使您使用
volatile
,这也是不可移植的。使用
\uuu sync
系列(C11的原子)中的其他功能来保证数据一致性。我认为
\uu sync\u synchronize
不适合使用。你有什么建议?
while (!block->meta.lock) {
    __sync_synchronize();
}