我的 gcc 交叉编译器不支持用于原子内存访问的内置函数。我如何使用 Sparc V8 架构的内联汇编来实现以下功能:
long __sync_val_compare_and_swap (long *ptr, long oldval long newval)
{
....
}
那些内置执行原子比较和交换。即如果*ptr的当前值为oldval,则将newval写入*ptr。
我的 gcc 交叉编译器不支持用于原子内存访问的内置函数。我如何使用 Sparc V8 架构的内联汇编来实现以下功能:
long __sync_val_compare_and_swap (long *ptr, long oldval long newval)
{
....
}
那些内置执行原子比较和交换。即如果*ptr的当前值为oldval,则将newval写入*ptr。
SPARC V8 没有 CAS 指令,因此您必须以某种方式模拟它。例如,在http://www.oracle.com/technetwork/server-storage/solaris10/index-142944.html使用类似 C 的 CAS 伪代码,并使用静态 pthread 互斥锁来确保原子 {} 区域的原子性。