C++ shared_ptr 的非原子引用计数:一个微基准测试的意外发现
2025-08-31
作者在Rust和C++的微基准测试中发现,C++的`shared_ptr`在单线程环境下,其引用计数的增加是非原子的。这源于GNU libstdc++的一个优化:它根据程序是否导入`pthread_create`来决定是否使用原子操作。在没有多线程的情况下,为了性能,它会跳过原子操作,这在某些情况下可能导致问题,例如动态库被静态链接的程序加载时。作者还对比了其他C++实现(例如libcxx和Visual C++),并最终通过在程序中引用`pthread_create`解决了性能问题。
开发
shared_ptr