Nicht-atomare Referenzzählung von shared_ptr in C++: Eine Überraschung beim Mikro-Benchmarking
Ein Mikro-Benchmark, der Rust- und C++-Datenstrukturen vergleicht, enthüllte ein unerwartetes Verhalten bei C++'s `shared_ptr`. In Single-Thread-Umgebungen optimiert GNU libstdc++ die Referenzzählung von `shared_ptr` so, dass sie nicht atomar ist, wenn `pthread_create` nicht importiert wird. Diese Performance-Optimierung ist zwar meist sicher, kann aber in ungewöhnlichen Szenarien zu Problemen führen, z. B. wenn eine dynamisch gelinkte Bibliothek von einem statisch gelinkten Programm geladen wird. Der Autor untersuchte andere C++-Implementierungen (libcxx und Visual C++) und behob schließlich die Performance-Diskrepanz, indem er `pthread_create` in seinem Mikro-Benchmark referenzierte. Die Entdeckung unterstreicht die Komplexität von Low-Level-Optimierungen und deren potenziellen unbeabsichtigten Folgen.