Funzione D usando il confronto e scambio di x86 CMPXCHG
Domanda
Sto cercando una funzione che presenti un'interfaccia D di alto livello CAS atomico su Intel x86.
So di poterlo fare con ASM inline (e se necessario lo farò), ma preferirei prendere il codice da qualcun altro se posso.
Soluzione
Dalla documentazione su: http://www.digitalmars.com/d/ 2.0 / overview.html
Inline Assembler
Driver di dispositivo, prestazioni elevate applicazioni di sistema, sistemi integrati, e talvolta è necessario il codice specializzato immergiti nel linguaggio assembly per ottenere il lavoro fatto. Mentre le implementazioni D sono non richiesto per implementare l'inline assemblatore, è definito e parte di la lingua. La maggior parte delle esigenze del codice assembly può essere gestito con esso, ovviando al necessità di assemblatori o DLL separati.
Anche molte implementazioni D lo faranno supportare funzioni intrinseche analogamente al supporto di C di intrinseci per manipolazione delle porte I / O, accesso diretto al galleggiante speciale operazioni a punti, ecc.
Quindi, in teoria, è possibile utilizzare direttamente CMPXCHG.
Modifica
Puoi dare un'occhiata a: http://www.dsource.org/projects/tango/browser/trunk/tango/core/Atomic.d?rev=4277
Ci vuole un po 'di tempo per caricarsi per qualche motivo, ma sta usando l'istruzione CMPXCHG internamente, dovrebbe essere banale ridistribuirlo per i tuoi scopi.