Fonction D utilisant le comparateur x86 CMPXCHG
Question
Je recherche une fonction qui présente une interface D de haut niveau avec CAS atomique sur Intel x86.
Je sais que je peux le faire avec ASM en ligne (et le cas échéant, je le ferai), mais je préférerais simplement récupérer le code de quelqu'un d'autre si je le peux.
La solution
D'après la documentation disponible sur: http://www.digitalmars.com/d/ 2.0 / overview.html
Assembleur en ligne
Pilotes de périphérique hautes performances applications système, systèmes embarqués, et le code spécialisé doit parfois plonger dans le langage d'assemblage pour obtenir le travail accompli. Alors que D implémentations sont pas nécessaire pour mettre en œuvre le inline assembleur, il est défini et fait partie de la langue. La plupart des besoins en code d'assemblage peut être manipulé avec, en évitant la besoin d'assembleurs séparés ou de DLL.
De nombreuses implémentations D vont également supporte les fonctions intrinsèques de manière analogue au support de C les composants intrinsèques pour la manipulation des ports d'E / S, accès direct aux flottants spéciaux opérations ponctuelles, etc.
Vous pouvez donc théoriquement utiliser directement le CMPXCHG.
Modifier
Vous voudrez peut-être consulter: http://www.dsource.org/projects/tango/browser/trunk/tango/core/Atomic.d?rev=4277
Le chargement prend du temps pour une raison quelconque, mais comme il utilise l'instruction CMPXCHG en interne, il devrait être facile de le réorganiser à vos fins.