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.
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