Auf 64-Bit-Solaris auf Sparc, ist die atomic_cas_64 (Function Call) implementiert Last-link/Zustand-store?Interne Implementierung von atomic_cas_64() auf Solaris auf Sparc?
Wenn nicht, was ist, wenn eine API bietet Solaris für Benutzermodus C-Code zur Verwendung von ll/sc?
Ich hatte gehofft, nicht einige Assembly lernen zu müssen - im Allgemeinen existieren C APIs, die auf diese Konstrukte auf niedrigerer Ebene abgebildet sind und alles, was ich brauche, ist entweder Doppelwort CAS (das nicht auf Sparc verfügbar ist) oder LL/SC (welches ist). Wenn Sparc CAS * ist * LL/SC, dann fein - wenn nicht, dann muss ich einen Weg, um tatsächlich nutzen LL/SC von C und ich bin der Hoffnung, ein Funktionsaufruf gibt es kann ich, anstatt Inline-Assembler verwenden. –
Sie müssen nicht zu viel über die Montage lernen. Dies sind C APIs. Sehen Sie sich die Dokumentation hier an: http://docs.sun.com/app/docs/doc/816-5168/atomic-cas-3c?a=view und hier http://docs.sun.com/app/ docs/doc/816-5168/membar-ops-3c? a = anzeigen. Das sollte genug sein, um dich in Gang zu bringen. Wenn Sie ein Beispiel benötigen, haben einen Blick auf https://svn.boost.org/trac/boost/browser/trunk/boost/smart_ptr/detail/sp_counted_base_solaris.hpp. Das verwendet atomic_cas_32, aber das gleiche Prinzip gilt. –
Das Problem ist, dass ich Doppelwort CAS verwende, um das ABA-Problem zu lösen. Sparc unterstützt kein Doppelwort-CAS, aber es hat LL/SC, was ein einzelnes Wort ist, löst aber das ABA-Problem. Wenn das einzelne Wort Sparc CAS wirklich * CAS ist, dann nützt es mir nichts. Wenn OTOH intern mit LL/SC implementiert wird, ist es in Ordnung. Daher hat die Sun-Doku auf ihrer atomaren ops C-API keine Verwendung. Boost war auch nicht, weil es die Frage nicht beantwortete. –