如何使用addx以原子方式递增值?

时间:2015-05-25 11:04:52

标签: inline-assembly

对stackoveflow进行研究我找到了这段代码:

 asm(
       "lock\n\t"
       "xadd %1, %0":
       "+m"( mem), "=r"(r):
       "1"( val ):
       "memory", "cc");

lock指令用于确保并发访问时的原子性,现在xadd添加两个寄存器的内容并将结果放在第一个。

但是我不理解代码的其余部分:如果mem = r然后在这种情况下用(val)增加内存内容1. r是否指向期望值?可以使用简单的返回值return mem返回任何这些值。 xadd操作是否特定于英特尔?

0 个答案:

没有答案