2012-03-22 4 views
7

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?

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.

+0

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