Le specializzazioni complete di std :: atomic per i tipi interi forniscono operatori di assegnazione di composti aritmetici come +=
, -=
, ma non *=
o /=
. Lo standard afferma questo, ma per quanto posso vedere non vi è alcuna ragione. Qualcuno potrebbe familiarizzare con il ragionamento che sta dietro alla sezione Atomic Operations Library e far luce su questo?Perché le specializzazioni std :: atomic <integral> forniscono operatori di assegnazione di moltiplicazione e divisione?
7
A
risposta
9
Penso che questo sia correlato all'hardware. Molte piattaforme hanno atomics per gestire +=
ma non so di nessuno che offre *=
. L'implementazione di questo attraverso il blocco sarebbe semplice, ma l'interfaccia di std::atomic
mescolerebbe allo stesso livello operazioni che sono in qualche modo economiche con operazioni molto costose.
Problemi correlati
- 1. Assegnazione di uno std :: shared_ptr negli operatori di assegnazione
- 2. Perché std :: vector ha due operatori di assegnazione?
- 3. Lo std :: atomic <std::string> funziona correttamente?
- 4. Perché std :: mutex è più veloce di std :: atomic?
- 5. Gli spazi attorno agli operatori di moltiplicazione e divisione vengono cancellati da IDE, come mantenerli?
- 6. Confronto (<), uscita (<<) e assegnazione (=) per boost :: opzionale
- 7. Comprendere operatori di assegnazione CComBSTR
- 8. Come usare std :: atomic efficiently
- 9. Dovrebbe essere std :: atomic volatile?
- 10. C++, std :: atomic, cosa è std :: memory_order e come usarli?
- 11. Perché gli operatori di assegnazione non sono sovraccaricabili in VB.NET?
- 12. Gli operatori di incremento in Go atomic su x86?
- 13. Operatori assegnazione stringa Javascript
- 14. Perché la divisione è più costosa della moltiplicazione?
- 15. Non ci sono specializzazioni di std :: hash per contenitori standard?
- 16. std :: movimento e mappa assegnazione
- 17. Perché gli operatori di confronto std :: vector e std :: string sono definiti come funzioni modello?
- 18. Perché gli oggetti std :: atomic non sono copiabili?
- 19. Perché è necessario utilizzare gli operatori di spostamento in java?
- 20. Operatori condizionali di assegnazione esistenziali in Coffeescript
- 21. Le specializzazioni modello richiedono la sintassi del template <>?
- 22. overloading << operatori e classi ereditate
- 23. Funzioni di riciclo e assegnazione (`split <-`)
- 24. Perché la divisione su `(?! ^)` E `(? <! ^)` Produce la stessa risposta?
- 25. Differenza tra operatori di stringa + e << in Ruby
- 26. Cancellare uno std :: vector richiede un operatore di assegnazione. Perché?
- 27. Informazioni sugli operatori di assegnazione JavaScript e PHP: perché i diversi risultati?
- 28. Posso creare uno std :: atomic <vector<int> thread-safe>?
- 29. Java doppia precisione costante moltiplicazione/divisione
- 30. Assegnazione di std :: function <int(int)> a std :: function <const int & (const int & x)>
Questo era il mio sospetto. Suppongo che sia per questo che ci sono le operazioni AND bit, OR e XOR ma non quelle mutevoli. – juanchopanza