Bekanntlich gibt es Transactional Memory TS (ISO/IEC TS 19841: 2015) im experimentellen C++: Is it enough to declare a function as transaction_safe, so they can be used thread-safe?Warum sind ordnete std :: map und order std :: set nicht eingeladen, um transaction_safe zu machen?
Und operator[]
als transaction_safe
für Behälter nur erklärt: std::vector
, std::unordered_map
, std::unordered_multimap
, std::unordered_set
, std::unordered_multiset
, std::deque
- Taken von n4514: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf
23,4 assoziative Container [assoziative]
23.4.4 Vorlage Klasse Karte [Karte]
23.4.4.1 Vorlage Klasse Kartenübersicht [map.overview]
In 23.4.4.1 [map.overview], fügen Sie "transaction_safe" zu den Erklärungen aller Varianten des Anfangs- und Endglied Funktionen und zu den Deklarationen von Größe, max_size und leer.
Aber warum ist nicht da operator[]
als transaction_safe
für std::map
und std::set
erklärt (aber es gibt für unordered_map
/unordered_set
)?
Und warum gibt es add „transaction_safe“ auf die Erklärungen aller Varianten der begin
und end
Mitgliederfunktionen für std::map
und std::set
?
Iteratoren begin
und end
sind sehr notwendig für die std::array
, std::vector
oder std::list
, aber nicht für eine assoziative Array. In einem assoziativen Array erforderlich finden oder finden und ändern Funktionen: find
, at
, insert
, erase
und operator[]
. Ohne sie macht es keinen Sinn.
Warum sind geordnete std :: map und ordered std :: set nicht eingeladen, transaction_safe zu machen?
Ich vermute stark, dass das unconditional transaction-safe auf 'operator []' für 'unordered_meow' ein Defekt ist. –