2009-02-07 3 views

Répondre

14

Vous trouverez des discussions au sujet de cette mise en œuvre des fonctionnalités en boost il: http://lists.boost.org/Archives/boost/2008/11/144803.php

> Peut les N2427 - C++ Types et opérations atomiques mises en œuvre

> sans l'aide du compilateur?

n °

Ils ne doivent pas nécessairement être intrinsics si vous pouvez écrire assembleur en ligne (ou assembleur séparément compilé pour que la matière), vous pouvez écrire les mêmes opérations directement. Vous pourrait même être en mesure d'utiliser simple C++ (par exemple juste affectation simple pour la charge ou stocker). La raison pour laquelle vous avez besoin de la prise en charge du compilateur empêche optimisations inappropriées: les opérations atomiques ne peuvent pas être optimisées, et ne doit généralement pas être réorganisé avant ou après toute autre opération. Cela signifie que même les magasins non atomiques doivent être terminés et que ne doit pas être mis en cache dans un registre (par exemple). En outre, les charges qui se produisent après une opération atomique ne peuvent pas être levées avant l'opération atomique. Sur certains compilateurs , il suffit d'utiliser l'assembleur en ligne . Sur d'autres, l'appel d'une fonction externe est suffisant. MSVC fournit _ReadWriteBarrier() pour fournir l'ordre du compilateur. Les autres compilateurs ont besoin d'autres indicateurs.