我正在在线阅读Linux Device Drivers 3rd Edition书籍,但无法理解原子变量的初始化宏:
static atomic_t foobar = ATOMIC_INIT(1);
我查看了Linux 内核 v3.2的源代码,但我只提出了两个定义:
#define ATOMIC_INIT(i) { (i) }
和
#define ATOMIC_INIT(i) ((atomic_t) { (i) })
宏定义的第二个版本在功能上似乎与第一个版本相同——事实上,当值无论如何都会被隐式强制转换为atomic_t
. 为什么有两个版本的定义?
如果在 Linux 内核的未来版本中结构发生变化,宏的目的是否ATOMIC_INIT
只是为了防止代码中断?atomic_t