Entièrement thread-safe shared_ptr mise en œuvre

Quelqu'un sait d'un thread-safe shared_ptr mise en œuvre? E. g. améliorer la mise en œuvre de shared_ptr est thread-safe pour les cibles (compteurs refcount) et également sans danger pour une utilisation simultanée shared_ptr instance lit, mais non en écriture ou en lecture/écriture.

(voir Boost docs, des exemples 3, 4 et 5).

Est-il un shared_ptr de mise en œuvre qui est entièrement thread-safe pour shared_ptr instances?

Étrange qui stimulent les docs disent que:

shared_ptr objets d'offrir le même niveau de sécurité des threads comme des types intégrés.

Mais si vous comparez un pointeur ordinaire (type intégré) pour smart_ptr, puis en écriture simultanés d'un simple pointeur est thread-safe, mais en écriture simultanés à un smart_ptr ne l'est pas.

EDIT: je veux dire que sans verrouillage de la mise en œuvre sur l'architecture x86.

EDIT2: Un exemple de cas d'utilisation pour un pointeur intelligent serait là où il y a un nombre de threads de travail de mise à jour globale shared_ptr avec un de leur élément de travail en cours et d'un moniteur de fil qui prend des échantillons aléatoires des éléments de travail. Partagé ptr l'élément de travail jusqu'à ce qu'un autre élément de travail pointeur est assigné (détruisant ainsi le travail précédent article). Le moniteur serait d'obtenir la propriété de l'élément de travail (de ce fait, la prévention de l'élément de travail pour être détruit) par l'attribution à ses propres partagé-ptr. Il peut être fait avec XCHG et de suppression manuelle, mais ce serait bien si une commune-ptr pourrait le faire.

Est un autre exemple où le global partagé-ptr est titulaire d'un "processeur", et il est attribué par un thread, et utilisé par un autre thread. Lorsque la "utilisateur" thread voit que le processeur de fragment-ptr est NULL, il utilise une autre logique pour le traitement. Si ce n'est pas NULL, il empêche le processeur de la destruction par l'attribution à ses propres partagé-ptr.

"écriture simultanés d'un simple pointeur est thread-safe" -- êtes-vous sûr de cela?
Au moins sur x86, si le pointeur est correctement aligné, l'opération d'écriture est atomique.
Qu'en écriture simultanés dans un thread et de supprimer dans un autre? (supprimer est essentiellement un type particulier de l'écriture; l'un qui oblitère le point d'être souligné).
Max: ce que vous décrivez est une simultané de la lecture et de l'écriture. suppression ne modifie pas la valeur du pointeur de la variable elle-même, donc il ne compte pas comme une écriture -- c'est la -pointu à valeur qui est (potentiellement) écrit (par le destructeur si existe).
"l'opération d'écriture est atomique" Qui n'est pas "thread-safe" dans le bon sens.

OriginalL'auteur Magnus Hiie | 2009-01-14