c - atomic_inc_return() 是否保证原子返回值?
问题描述
想象以下用例:
static atomic_t ref_counter = ATOMIC_INIT(0);
void incref(void) {
if (atomic_inc_return(&ref_counter) == 1) {
// init my stuff
}
}
void decref(void) {
if (atomic_dec_return(&ref_counter) == 0) {
// release my stuff
}
}
如果两个线程同时调用incref()
,ref_counter
保证2
两个调用后都有值。
但是原子执行是否也适用于返回值?我的意思是,我们是否保证其中一个线程将返回1
而第二个线程返回2
?或者他们俩都可能回来1
?
解决方案
但是原子执行是否也适用于返回值?
这就是这些函数的全部意义,否则它们将没有多大意义。整点atomic_*_return
是变量的修改和获取值是原子发生的。
我的意思是,我们是否保证其中一个线程返回 1 而第二个线程返回 2?
是的。原子访问是相互排序的。
或者他们都可能返回 1?
不。
推荐阅读
- javascript - Django:通过1-1关系更改扩展现有模型的模型的数据库记录
- javascript - 有没有办法覆盖数字类型输入的增量/减量处理?
- android - Android Studio 中没有单元测试选项
- java - 在一个函数中使用两组常量
- java - Gson 不映射 Java 中的值
- python - 使用 yfinance python 从 yahoo Finance 获取财务数据
- java - 我可以从毫秒值中获取当前时间的值吗
- vb.net - EMGU CV 与 vb.net
- ms-access - 如何设计两个不直接相关的表的查询
- apache-spark - 如果 mapPartitions 与 toDF() 一起使用,为什么很少有分区被处理两次