对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
操作是否特定于英特尔?