这篇总结并行编程的三种常见的内存管理方法,三种方法如下:

三种方法各有利弊,优缺点对比如下:

引用计数(Reference Counting)Hazard PointerRCU
读性能低,不可扩展高,可扩展高,可扩展
可保护的对象数量可扩展不可扩展可扩展
保护周期支持长周期支持长周期用户必须限制保护周期长度
遍历是否需要重试如果和删除冲突需要重试如果和删除冲突需要重试不需要
存在性保证复杂保证保证
读竞争
对象遍历开销CAS原子操作,内存屏障,cache missing内存屏障
读遍历机制无锁无锁有限制的无等待(wait free)
读引用获取可能失败可能失败不会失败
内存开销有限有限无限
内存回收机制无锁无锁阻塞
自动回收部分部分

已经有很多C++项目,包括开源和大厂内部项目,都开始采用Hazard Pointer和RCU来实现并发数据结构,而且C++标准委员会也已经在讨论将这两个组件加入到C++26标准中。

时代在变,并行编程技术也在突飞猛进。多线程多核(multi-core)技术,甚至甚多核(many-core)技术都在飞速发展,加上各种并行编程范式的应用,可以预见到在一段时期内,并行编程将面临百花齐放,技术爆发的局面。