Bonjour,
Je découvre actuellement les joies de la programmation concurrente, et suis tombé sur un bel article faisant usage de std::atomic<T*> pour créer une file thread safe et sans lock.
Dans cet article justement, l'auteur (Herb Sutter) utilise le type std::atomic<T*> comme s'il s'agissait d'un pointeur normal, c'est à dire en substance :
Or, j'ai beau regarder dans mon implémentation (GCC 4.7) et sur les sites décrivant la nouvelle norme C++11 (click), il n'est fait mention nulle part que std::atomic<T*> dispose d'un T* operator -> () (i.e. le code ci-dessus génère une erreur à la ligne 5).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 struct node { node* next; }; std::atomic<node*> some_node = ...; some_node = some_node->next;
J'ai donc deux questions :
- Sutter fume-t-il de l'herbe ?
- Pourquoi cet opérateur n'est-il pas ajouté à la spécialisation de std::atomic<T> pour T = U* ?
Si vous connaissez la réponse à la seconde (la première m'intéresse moins), je suis intéressé.
Partager