c - C中的原子参数执行顺序
问题描述
我正在尝试使用 stdatomic.h 函数,特别是 atomic_flag_test_and_set。我没有看到任何错误,但想知道我正在做的事情是否总是安全的。我有一个如下结构:
typedef struct Mystruct {
int somedata;
atomic_flag flag;
} Mystruct;
后来,当我创建一个 mystruct 并使用它的标志实例时,我这样做:
if(atomic_flag_test_and_set(&mystructInstance->flag)) {
// do something
}
的评估是否&mystructInstance->flag
总是在检查原子操作之前完成?我会这样假设,因为它应该是一个处理器指令(或模拟一个处理器指令的东西),但我想确定。
解决方案
的评估是否
&mystructInstance->flag
总是在检查原子操作之前完成?
这个问题的答案可以在 C 标准的“函数调用”部分找到。
6.5.2.2 函数调用
...
4. 参数可以是任何完整对象类型的表达式。在准备调用函数时,会评估参数,并为每个参数分配相应参数的值。
另请注意,如果一个函数接受多个参数,则传递给它的参数的评估顺序是未指定的。这也在标准的同一部分中提到。
10.在函数指示符和实际参数的评估之后但在实际调用之前有一个序列点。调用函数中的每个求值(包括其他函数调用)在被调用函数的主体执行之前或之后没有特别排序的,相对于被调用函数的执行是不确定的。
推荐阅读
- android - android - 当字符串在 RecyclerView 项目上达到显示最大显示宽度时换行
- angular - 角度材料:动态数据的垫表多列过滤器
- flutter - 关于如何显示内容取决于异步调用的小部件的最佳实践?
- java - 如果没有值,Java 流返回 0
- symfony - 在作曲家中安装注释
- typescript - Typescript 对象初始化程序错误,用于在构造函数简写中声明的默认属性的可选
- html - TypeError:无法读取 reactJS 中未定义的属性“拆分”
- python - 当我按下屏幕键盘按钮时,刽子手无法正常工作
- python - 实现模型(自动编码器 + CNN)如何确保我的模型不会过拟合?
- python - Pandas:合并两个具有相同值的不同键