找回密码
 注册
搜索
查看: 1053|回复: 0

请教linux中的 atomic_t的低8位是怎么用的??

[复制链接]
发表于 2012-2-3 17:24:17 | 显示全部楼层 |阅读模式
老的Linux版本,atomic_t实际只有24位长,低8位用来做锁.

在SPARC体系结构上,原子操作的实现不同于其他体系结构:32位int类型的低8位嵌入一个锁,因为SPARC体系结构对原子操作缺乏指令级的支持,所以只能利用该锁来避免对原子类型数据的并发访问。

我看了一下SPARC的代码:如下,没看明白低8位是如何用来做锁的??
static inline int __atomic24_add(int i, atomic24_t *v)
{
        register volatile int *ptr asm("g1");
        register int increment asm("g2");
        register int tmp1 asm("g3");
        register int tmp2 asm("g4");
        register int tmp3 asm("g7");

        ptr = &v->counter;
        increment = i;

        __asm__ __volatile__(
        "mov        %%o7, %%g4\n\t"
        "call        ___atomic24_add\n\t"
        " add        %%o7, 8, %%o7\n"
        : "=&r" (increment), "=r" (tmp1), "=r" (tmp2), "=r" (tmp3)
        : "0" (increment), "r" (ptr)
        : "memory", "cc");

        return increment;
}

请高手指教一二。谢谢
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 05:37 , Processed in 0.057062 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表