linux 原子操作
来源:互联网 发布:淘宝商城家具沙发 编辑:程序博客网 时间:2024/06/06 00:06
#define __xchg_op(x, ptr) \
({ \
\
__typeof(*(ptr)) __ret = (x); \
switch (sizeof(*(ptr))) { \
\
case 1: \
asm volatile("xchgb %b0,%1\n" \
: "+q" (__ret), "+m" (*(ptr)) \
::"memory", "cc"); \
break; \
case 2: \
asm volatile("xchgw %w0,%1\n" \
: "+r" (__ret), "+m" (*(ptr)) \
:: "memory", "cc"); \
break; \
case 4: \
asm volatile("xchgl %k0,%1\n" \
: "+r" (__ret), "+m" (*(ptr)) \
::"memory", "cc"); \
break; \
case 8: \
asm volatile("xchgq %0,%1\n" \
: "+r" (__ret), "+m" (*(ptr)) \
::"memory", "cc"); \
break; \
} \
__ret; \
({ \
\
__typeof(*(ptr)) __ret = (x); \
switch (sizeof(*(ptr))) { \
\
case 1: \
asm volatile("xchgb %b0,%1\n" \
: "+q" (__ret), "+m" (*(ptr)) \
::"memory", "cc"); \
break; \
case 2: \
asm volatile("xchgw %w0,%1\n" \
: "+r" (__ret), "+m" (*(ptr)) \
:: "memory", "cc"); \
break; \
case 4: \
asm volatile("xchgl %k0,%1\n" \
: "+r" (__ret), "+m" (*(ptr)) \
::"memory", "cc"); \
break; \
case 8: \
asm volatile("xchgq %0,%1\n" \
: "+r" (__ret), "+m" (*(ptr)) \
::"memory", "cc"); \
break; \
} \
__ret; \
})
#define xchg(ptr,v) __xchg_op((v), (ptr))
0 0
- Linux 原子操作
- Linux原子操作
- linux 原子操作
- linux 原子操作
- linux原子操作
- Linux 原子操作
- Linux 原子操作
- Linux 原子操作
- linux 原子操作
- linux中的原子操作
- 【转】Linux 原子操作
- Linux 原子操作
- linux gcc原子操作
- Linux 原子操作
- linux原子操作
- Linux Driver原子操作
- linux原子操作
- Linux 原子操作
- CSS:首字母字号变大而不影响下划线
- Use QPST dump eMMC image
- XWiki Rendering Syntax Markdown.jar各版本下载地址搜集汇总
- 邓仰东专栏|机器学习的那些事儿(四):基于GPU的机器学习实例之AlphaGO
- c++ 和 lua 写cocos2dx的区别
- linux 原子操作
- pthread_cond_wait 详解
- CCS3盒模型与盒模型属性box-sizing
- 123
- JAVA语言基础学习第二天
- java怎么求点到线段的距离
- TensorflowOnSpark 安装
- python: dict.get()方法
- Mac终端美化