首页 > 解决方案 > 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

标签: clinux-kernel

解决方案


但是原子执行是否也适用于返回值?

这就是这些函数的全部意义,否则它们将没有多大意义。整点atomic_*_return是变量的修改和获取值是原子发生的。

我的意思是,我们是否保证其中一个线程返回 1 而第二个线程返回 2?

是的。原子访问是相互排序的。

或者他们都可能返回 1?

不。


推荐阅读