C语言内联汇编执行是否无序是依赖于CPU的具体实现的。因此,为了保证正确性,可以使用CPU指令的原子性进行保护。例如,可以使用x86架构中的lock前缀,确保原子性操作。示例如下:
int shared_var = 0;
__asm__ __volatile__ (
"lock\n\t"
"xaddl %%eax, %0;"
: "=m"(shared_var)
: "a"(1)
);
以上的内联汇编代码使用x86架构中的xaddl指令实现原子的加法操作。同时,使用lock前缀确保该操作的原子性,避免了多线程环境下的问题。