【问题标题】:Does atomic_inc_return() guarantee atomic return value?atomic_inc_return() 是否保证原子返回值?
【发布时间】:2020-06-09 08:35:44
【问题描述】:

想象以下用例:

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

【问题讨论】:

    标签: c linux-kernel


    【解决方案1】:

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

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

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

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

    或者他们都可能返回 1?

    没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多