Opérations atomiques C ++ pour les structures sans verrou
Je me suis mise en œuvre d'un lock-free mécanisme à l'aide atomique (double) de comparer et de swap instructions par exemple cmpxchg16b
Je suis en train d'écrire cette assemblée, puis en le reliant la. Cependant, je me demandais si il y avait un moyen d'obtenir le compilateur pour ce faire automatiquement pour moi? par exemple surround bloc de code avec "atomiquement' et le faire aller comprendre comment mettre en œuvre le code d'une instruction atomique dans le sous-jacent de l'architecture du processeur (ou générer une erreur lors de la compilation si le sous-jacent arc ne le supporte pas)?
P. S. je sais que gcc a quelques built-ins (au moins pour les CAS)
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins
source d'informationauteur bugmenot77
Vous devez vous connecter pour publier un commentaire.
Déjà kindof répondu ici.
Le C++0x norme fournira certains atomique types de donnéesprincipalement en entier et non avenue types en utilisant std::atomic<> modèle. Cet article mentionne Boehm atomic_ops projet que vous pouvez télécharger et utiliser aujourd'hui.
Si non, pouvez-vous pas mettre en œuvre l'assembleur inline dans le compilateur? Je sais que MSVC a la __asm mot-clé pour l'assembleur en ligne routines. Google dit ouigcc peut le faire aussi.
L'avenir "C++0x" standard de C++ de soutien des opérations atomiques &c -- voir, par exemple, http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html pour un raisonnablement thorought discussion. Et ce jusqu'à la prochaine norme est approuvée et largement mis en œuvre, bien sûr, il n'y a aucun moyen d'obtenir une telle fonctionnalité "de façon portable" à travers les compilateurs; si vous êtes intéressés spécifiquement au-delà de compilateurs gcc, peut-être que vous pouvez ouvrir une autre question spécifiquement à leur sujet.