2010-09-09 5 views
0

J'ai 2 threads qui accèdent à cet objet.
Discussion A: met à jour un membre hared_ptr boost Discussion B: lit que membre boost shared_ptrLecture d'un boost shared_ptr atomiquement

Depuis un shared_ptr n'est pas un type de pointeur entier/réel, il ne peut pas être lu atomiquement par fil B.

I vouloir éviter les verrous.

Comment puis-je garantir que le thread B obtient un shared_ptr valide?

Merci!

Répondre

0

Même s'il s'agissait d'un type ordinaire, il n'y aurait aucune garantie qu'une lecture se fasse atomiquement dans le monde réel en fonction de votre architecture.

considère également le cas où le thread B se bloque pendant une longue période, et a toujours un pointeur vers un ancien objet que A aurait pu supprimer depuis lors. Dans ce cas, vous pouvez envisager d'utiliser RCU pour empêcher A de supprimer l'ancien pointeur. mais cela signifie aussi plus de code et plus de bugs difficiles à trouver

Utilisez simplement des verrous. Le surcoût supplémentaire vous évite d'avoir à comprendre pourquoi votre non-synchronisation ne fonctionnera pas. Si vous voulez vraiment éviter les verrous, évitez d'utiliser des variables partagées.

Questions connexes