C中的原子递减和测试

前端之家收集整理的这篇文章主要介绍了C中的原子递减和测试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在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++相关文章