// 原子类型
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语言 + 汇编 实现原子操作
最新推荐文章于 2024-07-24 17:46:08 发布
关键词由CSDN通过智能技术生成