C中的原子递减和测试

C中的原子递减和测试,第1张

概述我正在C中实现一个需要使用多个线程的引用计数系统.因此,我需要一种方法来减少整数引用计数,并测试一次原子 *** 作结果是否为零.我可以使用C11和 stdatomic.h,但似乎没有减量和测试 *** 作. 这是最好的(即最便携的)方式吗?我可以使用stdatomic.h函数来实现吗? 这是引用计数(伪代码)的核心: retain(object) { ++object.ref_count; // pr 我正在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资格.并且前缀 – 运算符应该可以满足您的需要.

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

总结

以上是内存溢出为你收集整理的C中的原子递减和测试全部内容,希望文章能够帮你解决C中的原子递减和测试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存