shared_ptr objects offer the same level of thread safety as built-in types. A shared_ptr instance can be "read" (accessed using only const operations) simultaneously by multiple threads. Different shared_ptr instances can be "written to" (accessed using mutable operations such as operator= or reset) simultaneosly by multiple threads (even when these instances are copies, and share the same reference count underneath.)
Donc si tu as deux threads, l'un qui lit le pointeur et l'autre qui l'écrit, le résultat est indéfini (race condition). À toi de fournir les verrous nécessaires pour que cela n'arrive pas.
La norme n'impose pas d'être lock-free.
Cependant, toujours d'après la même page,
Starting with Boost release 1.33.0, shared_ptr uses a lock-free implementation on the following platforms:
GNU GCC on x86 or x86-64;
GNU GCC on IA64;
Metrowerks CodeWarrior on PowerPC;
GNU GCC on PowerPC;
Windows.
If your program is single-threaded and does not link to any libraries that might have used shared_ptr in its default configuration, you can #define the macro BOOST_SP_DISABLE_THREADS on a project-wide basis to switch to ordinary non-atomic reference count updates.
Donc il existe un moyen d'être partagé sans passer par des instructions atomiques.
[^] # Re: templates variadiques
Posté par lasher . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 4.
D'après la doc de boost,
Donc si tu as deux threads, l'un qui lit le pointeur et l'autre qui l'écrit, le résultat est indéfini (race condition). À toi de fournir les verrous nécessaires pour que cela n'arrive pas.
La norme n'impose pas d'être lock-free.
Cependant, toujours d'après la même page,
Donc il existe un moyen d'être partagé sans passer par des instructions atomiques.