C ++ 0x implementazione del modello atomico
-
22-08-2019 - |
Domanda
So che simili uscite dei modelli in TBB di Intel, oltre che non riesco a trovare qualsiasi implementazione su Google o nella libreria Boost.
Soluzione
Si possono trovare discussioni su questa implementazione funzione di spinta c'è: http: //lists.boost.org/Archives/boost/2008/11/144803.php
> Può il N2427 - Tipi di C ++ atomici e le operazioni da attuare
> senza l'aiuto del compilatore?
No.
Non hanno bisogno di essere intrinseche se si può scrivere assembler inline (o assembler separatamente compilato per quella materia), allora si può scrivere il operazioni stesse direttamente. voi potrebbe anche essere in grado di utilizzare semplice C ++ (Assegnazione esempio semplicemente per carico o negozio). Il motivo è necessario supporto del compilatore impedisce ottimizzazioni inappropriate: atomica operazioni non possono essere ottimizzate, e in genere non devono essere riordinati prima o dopo qualsiasi altra operazione. Ciò significa che anche non-atomico negozi eseguito prima di un atomica negozio deve essere completa, e non ci riesce essere memorizzate nella cache in un registro (per esempio). Inoltre, i carichi che si verificano dopo un'operazione atomica non può essere sollevato prima che l'op atomica. su alcuni compilatori, usando solo assembler inline è abbastanza. Su altri, chiamare un funzione esterna è sufficiente. MSVC fornisce _ReadWriteBarrier () per fornire l'ordinamento compilatore. altri compilatori bisogno di altre bandiere.