0

我的 gcc 交叉编译器不支持用于原子内存访问的内置函数。我如何使用 Sparc V8 架构的内联汇编来实现以下功能:

long __sync_val_compare_and_swap (long *ptr, long oldval long newval)
{
....
}

那些内置执行原子比较和交换。即如果*ptr的当前值为oldval,则将newval写入*ptr。

4

1 回答 1

2

SPARC V8 没有 CAS 指令,因此您必须以某种方式模拟它。例如,在http://www.oracle.com/technetwork/server-storage/solaris10/index-142944.html使用类似 C 的 CAS 伪代码,并使用静态 pthread 互斥锁来确保原子 {} 区域的原子性。

于 2012-02-20T12:17:50.633 回答