Sé que boost tiene atomic_shared_ptr que se puede usar con un shared_ptr.

Pero, ¿hay alguna manera de hacer algo similar con boost :: intrusive_ptr?

Es decir, ¿es posible compartir boost :: intrusive_ptr a través de un escritor / múltiples hilos de lectura SIN usar mutex?

Fondo de fondo:

Desafortunadamente, mi lugar de trabajo solo permite hasta C ++ 11 (NO permite el uso de C ++ 20 todavía). Las funciones std :: atomic_store en C ++ 11 NO parecen tan eficientes utilizan mutex bajo el capó (ver Notas en el enlace mencionado).

Además, debido a los requisitos de rendimiento, NO se prefiere nuevo / eliminar en std / boost shared_ptr para Control Blocks. De ahí la necesidad de utilizar boost :: intrusive_ptr.

1
aKumara 12 mar. 2021 a las 08:19

1 respuesta

La mejor respuesta

Parece que esto es imposible (al menos con C ++ 11) ya que incluso boost :: atomic_shared_ptr parece usar un boost :: detail :: spinlock para esto. ref: https://github.com/BeamMW/ boost-linux / blob / master / boost / smart_ptr / atomic_shared_ptr.hpp

0
aKumara 14 mar. 2021 a las 14:31