gpt4 book ai didi

c - C中的原子递减和测试

转载 作者:太空狗 更新时间:2023-10-29 17:11:45 24 4
gpt4 key购买 nike

我正在用 C 语言实现一个引用计数系统,它需要使用多线程。因此,我需要一种方法来减少整数引用计数并通过一个原子操作测试结果是否为零。我可以使用 C11 和 stdatomic.h ,但似乎没有递减和测试操作。

解决此问题的最佳(即最便携)方法是什么?我可以使用 stdatomic.h 函数来实现吗?


这是引用计数的核心(伪代码):

retain(object) {
++object.ref_count; // pretty easy to make this atomic
}

release(object) {
if (--object.ref_count == 0) // need this to be atomic also
free(object)
}

最佳答案

您似乎对 C11 的原子有误解。原子限定一种类型,而不是单个操作。

如果您使用 _Atomic 声明您的变量,则对它的所有操作都是原子的。因此,如果您对原子操作的默认“顺序一致性”感到满意(您应该这样做),那么您只需要一个额外的 _Atomic 限定即可。前缀 -- 运算符应该可以很好地满足您的需要。

如果你想处理不同类型的一致性,你可以使用 atomic_fetch_sub,例如只有这样,您才能获得修改前的值,而不是修改后的值。因此,与其将其与 0 进行比较,不如将其与 1 进行比较。

关于c - C中的原子递减和测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com