Je sais que boost a atomic_shared_ptr qui peut être utilisé avec un shared_ptr.

Mais y a-t-il un moyen de faire quelque chose de similaire avec boost :: intrusive_ptr?

C'est-à-dire est-il possible de partager boost :: intrusive_ptr sur un écrivain / plusieurs threads de lecture SANS utiliser de mutex?

Arrière-plan:

Malheureusement, mon lieu de travail ne permet que jusqu'au C ++ 11 (ne permet pas encore d'utiliser C ++ 20). Les fonctions std :: atomic_store en C ++ 11 ne semblent PAS efficaces car ils utilisent des mutex sous le capot (voir les notes dans le lien mentionné).

De plus, en raison des exigences de performances, les nouvelles / suppressions se produisant dans std / boost shared_ptr pour les blocs de contrôle ne sont PAS préférées. D'où la nécessité d'utiliser boost :: intrusive_ptr.

1
aKumara 12 mars 2021 à 08:19

1 réponse

Meilleure réponse

Cela semble impossible (au moins avec C ++ 11) car même boost :: atomic_shared_ptr semble utiliser un boost :: detail :: spinlock pour cela. ref: https://github.com/BeamMW/ boost-linux / blob / master / boost / smart_ptr / atomic_shared_ptr.hpp

0
aKumara 14 mars 2021 à 14:31