2009-08-12 3 views

Antwort

1

Sparc64 - alleine unter modernen CPUs - implementiert weder Double-Wide-CAS noch LL/SC. Daher ist die Implementierung von Lock-Free-Code problematisch. Es gibt Lösungen, aber sie sind Lösungen für ein Problem (ABA), das auf anderen Plattformen aufgrund ihrer Unterstützung für CAS oder LL/SC nicht existiert. Darüber hinaus kann eine Reihe von Lock-Free-Algorithmen aufgrund dieser Einschränkung nicht auf Sparce implementiert werden.

0

Sie können sich die Implementierungen SPARC und SPARCv9 ansehen, um genau zu sehen, was sie tun ... Sie sollten sich die Funktionen von member_ * (in denselben Dateien) ansehen, um zu sehen, was Sie tun können, um stärkere Garantien zu erhalten .

+0

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. –

+0

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. –

+0

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. –