J'utilise actuellement la table de hachage simultanée de tbb pour effectuer des insertions simultanées dans une carte de hachage. Chaque clé est une chaîne et une valeur est un vecteur d'entiers. Je voudrais réaliser ce qui suit: lors des insertions, si la clé n'existe pas, je l'insère et ajoute la valeur à son vecteur. S'il existe, j'ajoute simplement la valeur à son vecteur. Après avoir inspecté l'API de mappage de hachage tbb simultanée, j'ai remarqué que les fonctions find et insert ne renvoyaient que des booléens. Alors, comment puis-je retourner un pointeur sur la clé si elle existe?tbb hash map find find & insert
Répondre
Il existe des méthodes qui nécessitent un accesseur dans leurs arguments. L'accesseur est essentiellement un pointeur couplé à un scoped_lock
protégeant l'accès simultané à l'élément. Sans le verrou, un élément peut être modifié simultanément, ce qui entraîne une course de données. Donc, n'utilisez jamais directement un pointeur vers l'élément dans la carte concurr_hash_map (à moins d'être protégé par l'accesseur).
De plus, vous n'avez pas besoin d'une méthode find()
pour votre tâche puisque les méthodes insert()
créent l'élément s'il n'existe pas.
Selon le Reference manual, la carte de hachage a les méthodes suivantes qui satisferont probablement vos besoins:
bool insert(accessor& result, const Key& key); // creates new element by default
bool insert(accessor& result, const value_type& value);// creates new element by copying
Voici un exemple:
{
hash_map_t::accessor a;
hash_map.insert(a, key); // creates by default if not exists, acquires lock
a->second.my_vector.push_back(value); // new or old entry, add to vector anyway
} // the accessor's lock is released here
L'accesseur verrouiller un verrou sur un seul enregistrement (mémoire transactionnelle similaire) ou sur toute la carte (toutes les opérations seraient verrouillé comme on le ferait manuellement avec standard std :: unordered_map + std :: lock)? – DuckQueen
Juste un élément est verrouillé par l'accesseur bien sûr. Veuillez noter qu'il s'agit d'un verrou en lecture-écriture, voir const_accessor – Anton
- 1. C++ STL map :: find()
- 2. Groovy :: Map Find Recursive
- 3. C++ unordered_map SIGSEGV on find() ou insert()
- 4. jQuery find attribut from url hash
- 5. Tuyauterie find to find
- 6. Entity Manager find() avec la propriété Map
- 7. Find(). Find() ne fonctionne pas dans Chrome
- 8. find Périphérique
- 9. find état
- 10. NHibernate find
- 11. JQuery find()
- 12. Lambda question std :: find
- 13. jQuery find div help
- 14. C++ map :: find char * par rapport à char []
- 15. Comment fonctionne la fonction STL map :: find sans l'opérateur d'égalité?
- 16. pymongo find() vs find MongoDB(), pymongo find() donne moins de données sur le document
- 17. Qui est plus rapide, 'find -exec' ou 'find | xargs -0 '?
- 18. Quelle est la différence entre find-grep et grep-find?
- 19. Java Enums find enum
- 20. CakePHP find ('threaded') pagination
- 21. Netty - Find Channel ID
- 22. Android OpenCV Find contours
- 23. git find fat commit
- 24. PHP simple_html_dom find
- 25. Commande Solaris find
- 26. performance find point sensible
- 27. Problème jQuery .find()
- 28. jquery find method
- 29. activerecord find through association
- 30. DataRowCollection find partiel
Ai-je répondu à votre question? – Anton
Toutes mes excuses pour le retard dans le marquage de la bonne réponse. Oui tu peux. Merci pour votre aide. Je vois que la communauté tbb est certainement petite! – NewToAndroid
merci :) Oui, [tag: tbb] communauté est assez petit, petit nombre de votes, questions, vues – Anton