当<stdatomic.h>包含在文件

时间:2017-04-25 16:29:34

标签: c gcc

在用于并发编程的学校项目期间,我们在项目中包含<stdatomic.h>并修改了变量声明的相应数据类型,以允许对某些全局变量进行原子操作。

当我开始研究stdatomic标题时,我看到定义了一堆数据类型和操作以允许所需的行为。

当我编译并执行对象转储时,我注意到的是现在添加了内存栅栏。我还假设像my_atomic_variable += 5;这样的操作被替换为stdatomic头中声明的一些宏/函数。

我想知道的是如何简单地通过更改源代码中的数据类型,添加内存栅栏等。我想在某些时候,像__atomic_signal_fence这样的函数会嵌入到发生读/写的源代码中,但我不知道这是如何实现的。不幸的是,阅读头文件并没有多大帮助。我得到的印象是有一些关于编译器如何工作的概念,我不熟悉或不理解。

更新

在回应评论时,让我澄清一下。我理解C的方式是存在某些基本数据类型,例如int。我想象atomic_int方面的stdatomic实现int和一些额外的代码。在我看来,当一些原子int被赋值为my_atomic_int = 1时,不知何故,这会被转换为比指定常规整数通常所需的更复杂的指令集。

我不明白的是,在允许使用=运算符的stdatomic代码中可能存在的内容,因为C不支持运算符重载。实际上这是什么代码? gcc是否知道如何翻译原子指令,因为它内置了原子数据类型?如果没有,我怎么能编写类似于stdatomic的代码,其中gcc知道如何为我的自定义数据类型处理=运算符?

0 个答案:

没有答案