// 原子类型
typedef struct s_ATOMIC {
volatile int a_count;
} atomic_t;
// 原子读
static inline int atomic_read(const atomic_t *v) {
return (*(volatile u32_t *) &(v)->a_count);
}
// 原子写
static inline void atomic_write(atomic_t *v, int i) {
v->a_count = i;
}
// 原子加
static inline void atomic_add(int i, atomic_t *v) {
__asm__ __volatile__("lock;" "addl %1,%0"
: "+m" (v->a_count)
: "ir" (i));
}
// 原子减
static inline void atomic_sub(int i, atomic_t *v) {
__asm__ __volatile__("lock;" "subl %1,%0"
: "+m" (v->a_count)
: "ir" (i));
}
// 原子自增
static inline void atomic_inc(atomic_t *v) {
__asm__ __volatile__("lock;" "incl %0"
: "+m" (v->a_count));
}
// 原子自减
static inline void atomic_dec(atomic_t *v) {
__asm__ __volatile__("lock;" "decl %0"
: "+m" (v->a_count));
}
c语言 + 汇编 实现原子操作
最新推荐文章于 2025-10-02 17:39:32 发布
这篇博客介绍了原子类型`atomic_t`及其相关的一系列原子操作,包括原子读、写、加、减、自增和自减。这些操作在多线程编程中用于保证数据的完整性,防止数据竞争。通过使用`__asm__ __volatile__`进行汇编指令插入,确保了操作的原子性。
631

被折叠的 条评论
为什么被折叠?



