W standardzie C++ 11 sekcja 1.10/5 wymienia, ale nie definiuje formalnie terminów: acquire operation
, release operation
i consume operation
. Następnie w rozdziale 29 używa się tych terminów, aby opisać działania niektórych uporządkowanych pamięci, operacji atomowych i ogrodzeń pamięci. Na przykład, 29,3/1 na "porządek i spójność" stwierdza:Czy standard C++ 11 formalnie definiuje operacje pobierania, wydania i używania?
memory_order_release, memory_order_acq_rel i memory_order_seq_cst: operacja sklep wykonuje operację Release [podkreślenie własne] w pamięci dotkniętego Lokalizacja.
Ten typ języka jest powtarzany w całej sekcji 29, ale to nie przeszkadza mi trochę, że wszystkie znaczenia dla memory_order
wyliczenia oparte są na rodzaje operacji, które same nie wydają się być sformalizowane w normie, ale musi mieć pewne wspólnie uzgodnione znaczenie, aby były skuteczne jako definicje.
Put inny sposób, gdybym powiedział „bar jest przerzucony foo”, beton sens pasku i foo są niejednoznaczne, ponieważ ani termin jest formalnie zdefiniowany. Określa się tylko ich względną naturę.
Czy standard C++ 11, czy jakikolwiek inny dokument komitetu standardu C++ 11 formalnie definiuje, czym dokładnie są acquire operation
, release operation
itd., Czy są to po prostu powszechnie rozumiane terminy? Jeśli to drugie, czy istnieje dobre odniesienie, które jest uważane za standard branżowy dla znaczenia tych operacji? Pytam konkretnie, ponieważ modele spójności pamięci sprzętowej nie są sobie równe, a zatem domyślam się, że musi być jakieś uzgodnione odniesienie, które pozwala tym, którzy implementują kompilatory itp., Odpowiednio tłumaczyć semantykę tych operacji na natywne komendy zespołu.
Zgadzam się z PO. To, czy standard jest logicznie możliwy do odczytania, to jedno pytanie, ale w każdym razie norma jest niezwykle myląca w tym konkretnym punkcie. – thb
[Blog Jeffa Preshinga o wydaniu/nabyciu] (http://preshing.com/20120913/acquire-and-release-semantics/) definiuje je pod kątem wymaganego zamówienia w odniesieniu do wcześniejszych/późniejszych ładunków/sklepów, w sposób zgodny z semantyką C++ 11. Nie zdawałem sobie sprawy, że C++ 11 formalnie nie definiuje ich w terminach takich jak ten. –