Linux的ACCESS_ONCE宏定义如下:
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
我了解这段代码的作用,但不明白为什么它如此复杂?我的理解是它完成以下操作:
- 获取关注变量的地址(创建一个临时指针)
- 将其转换为相同类型的volatile指针
- 对该指针进行解引用操作
你有什么想法,为什么不能以更简单的方式实现,比如:
#define ACCESS_ONCE(x) ((volatile typeof(x))(x))